FAMOS
Tipsに関するFAQ
Q文字の検索
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文字列を置換
Q文字列から変数を参照する
Q数値を文字列に変換する
Q文字列を数値に変換する
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 _* ;必要のない変数を削除
本ウェブサイトではサイト利用の利便性向上のために「クッキー」と呼ばれる技術を使用しています。サイトの閲覧を続行されるには、クッキーの使用に同意いただきますようお願いいたします。詳しくはプライバシーポリシーをご覧ください。