FAMOS

Tipsに関するFAQ

Q文字の検索

FAQ ID:s049

A

文字列"This is a blue pen. That is red pen."から"is"を検索して、その位置を返します

Result = TxWhere( "This is a blue pen. That is red pen.", "pen")

結果は 6 となります。
検索する文字列が複数ある場合、最初に見つかった位置だけが返されます。 文字列が見つからなかった場合、0が返されます。

製品詳細はこちら

回答を閉じる

Q文字列の一部を取得

FAQ ID:s050

A

文字列"This is a pen"から"is"取得します。

Result = TPart( "This is a pen", 6, 2)

結果は"is"となります。

例えば、"is"以降の文字列を取得したい場合、TxWhereやTLeng関数を使用すると取得できます。

  Str1 = "This is a pen" ;検索される文字列
  Str2 = "is" ;検索したい文字列
  Leng1 = TLeng( Str1) ;検索する文字の長さ=13
  Leng2 = TLeng( Str2) ;検索する文字の長さ=2
  Position = TxWhere( Str1, Str2) ;検索する文字の位置=6
  Result = TPart( Str1, Position, Leng1-Leng2+1) ;"is a pen"

製品詳細はこちら

回答を閉じる

Q文字列を置換

FAQ ID:s051

A

文字列"This is a pen"の"pen"を"pencil"に置換します。

Result = TReplace( "This is a pen", "pen", "pencil")

結果は"This is a pencil"となります。

製品詳細はこちら

回答を閉じる

Q文字列から変数を参照する

FAQ ID:s052

A

変数名を<>で囲ってください。変数を参照できます。

Data1~5までの連続したデータ名を持つダミーデータを作成します。

  i=1
  While i<=5
    VarName = "Data"+TForm( i, "F00")
    <VarName> = Lneg(0,10)+i*10

    i=i+1
  End

製品詳細はこちら

回答を閉じる

Q数値を文字列に変換する

FAQ ID:s053

A

関数"TForm"で変換します。

Data1~5までの連続したデータ名を持つダミーデータを作成します。

  i=1
  While i<=5
    VarName = "Data"+TForm( i, "F00")
    <VarName> = Lneg(0,10)+i*10

    i=i+1
  End

製品詳細はこちら

回答を閉じる

Q文字列を数値に変換する

FAQ ID:s026

A

関数"TtoSv"で変換します。

製品詳細はこちら

回答を閉じる

Q連続したフォルダー内のデータをループで結合する方法

FAQ ID:s025

A
;分割した保存したデータを結合する方法
;例えば停電などで途中までのデータが消失してしまわないように
;1時間の測定に対して10分毎に保存したと考えます。
;
;ディレクトリー構造は以下と仮定します。
;(FAMOSのサンプルデータと同じです。)
;
; C:\imc\dat\Experim\
; |
; |__ 0001\
; |     Channel1.DAT
; |     Channel3.DAT
; |__ 0002\
; |     Channel1.DAT
; |     Channel3.DAT
; |__ 0003\
; |     Channel1.DAT
; |     Channel3.DAT
; |__ 0004\
; |     Channel1.DAT
; |     Channel3.DAT
; |__ 0005\
; |     Channel1.DAT
; |     Channel3.DAT
; |__ 0006\
;       Channel1.DAT
;       Channel3.DAT
;
;以下にFAMOSシーケンスを示します。Example

Example

;;;;ダミーデータの作成
Channel1 = Leng(0,0)

Channel3 = Leng(0,0)

;;;;Main Loop
FAMOS
    i=1
    While i<=6
    ;;;;ファイル名の作成
       dir = "C:\imc\dat\Experim\000" + TForm(i, "F00")
       temp1 = dir + "\Channel1.DAT"
       temp2 = dir + "\Channel3.DAT"

    ;;;;データの読み込み
        Load <temp1> data1
        Load <temp2> data2

    ;;;;データの結合
        Channel1 = Join( Channel1, data1)
        Channel3 = Join( Channel3, data2)

        i=i+1
    End

■日付フォルダー内のデータをループで結合する方法

フォルダー名が日付になっていると”その1”の方法ではエラーが表示されてしまいます。
どのように対応すればよいですか?

; C:\imc\dat\Experim\
; |
; |__ 2003-01-23 10-31-22 (1)\
; |     Channel1.DAT
; |     Channel3.DAT
; |__ 2003-01-23 10-31-32 (2)\
; |     Channel1.DAT
; |     Channel3.DAT
; |__ 2003-01-23 10-31-42 (3)\
; |     Channel1.DAT
; |     Channel3.DAT

上記のようにフォルダー名にスペースや括弧が含まれている場合、関数"LOAD"はパスを認識できません。
このような場合、ファイル関数を使用してください。

Example

;;;;ダミーデータの作成
Channel1 = Leng(0,0)

Channel3 = Leng(0,0)


;;;;Main Loop
FID = FsFileListNew("c:\imc", "*.*", 1, 0, 0)
i=1

While i<=FsFileListGetCount(FID)
   
   ;;;;ファイル名の作成
   dir = FsFileListGetName(FID,i)
   
   Name1 = dir + "\Channel01.DAT"
   Name2 = dir + "\Channel03.DAT"
   
   ;;;;データの読み込み
   DID = FileOpenDSF(Name1,0)
   data1 = FileObjRead(DID,1)
   Err = FileClose(DID)
   
   DID = FileOpenDSF(Name2,0)
   
   data2 = FileObjRead(DID,1)
   Err = FileClose(DID)
   
   ;;;;データの結合
   Channel1 = Join( Channel1, data1)
   Channel3 = Join( Channel3, data2)
   
   i=i+1
End

FsFileListClose(FID)

製品詳細はこちら

回答を閉じる

Q変数名に連続した番号を付けているのですが、ループを使って処理できますか?

FAQ ID:s003

A

例えば、以下のようなチャンネル名(データ)が存在するとします。

    Ch1
    Ch2
    Ch3
     :

    Ch15
    Ch16

例えば、これらのチャンネルのデータを切り出す場合、それぞれ処理させると以下のようにプログラムが凡長になってしまいます。

    Out01 = Cut( Ch1,  0, 10 )
    Out02 = Cut( Ch2,  0, 10 )
    Out03 = Cut( Ch3,  0, 10 )
     :

    Out15 = Cut( Ch15, 0, 10 )
    Out16 = Cut( Ch16, 0, 10 )

このとき、以下のように文字列関数を使ってチャンネル名を作成します。

Example

_i = 1

While _i <= 16   ;文字列としてチャンネル名を作成します
  ;----------------------
  _temp   = TForm( _i, "F00")      ; 数値を文字列に変換
  _ChName = TAdd( "Ch", _temp)     ; 文字列を連結(Ch1)

  ;データ処理(例:波形の切り出し)
  ;----------------------

  _temp1 = Cut( <_ChName>, 0, 10)  ;作成した文字列に対応する変数を処理
                           ;<>で囲むと文字列に対応した変数を参照できます。

  ;出力データの作成
  ;----------------------
  _Output = TAdd( "Out", _temp) 
  <_Output> = _temp1 

  _i=_i+1 
End 

Del _* 		     	        ;必要のない変数を削除

製品詳細はこちら

回答を閉じる