FAMOS

Tipsに関するFAQ

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 _* 		     	        ;必要のない変数を削除

製品詳細はこちら

回答を閉じる