FAMOS

Tipsに関するFAQ

Q(Ver 7.2以降) 関数ボックスに関数一覧が表示されず、お気に入りだけが表示される。

A

関数ボックスのギア型のアイコンをクリックして、「お気に入りの表示」のチェックマークを外して下さい。

製品詳細はこちら

回答を閉じる

QFAMOSメイン画面のGUIを表示せずにシーケンスを実行したい。

A

コマンドプロンプトやバッチファイルで下記の様に実行することでFAMOSメイン画面のGUIを表示することなくシーケンスを実行することができます。ただし、起動時のimc社のロゴは表示されます。

Load.seqを実行する例)
> start /min Load.seq

注1) FAMOS.exeにPATHが通っていることと、.seqファイルがFAMOS.exeに関連付けされていることが必要です。通常これらはFAMOSインストール時に設定されていますが、エラーが発生する場合はご確認下さい。

注2) シーケンス実行完了後にコマンドプロンプトやバッチファイルで何らかの操作(出力ファイルのコピーなど)を行う場合はstartコマンドの代わりにcallコマンドを使用して下さい。詳しくはコマンドプロンプトで helpコマンドを実行してご確認下さい。

製品詳細はこちら

回答を閉じる

Q0056のように0付の番号でファイル名・フォルダ名を生成したい。(Ver.7.0以降)

A

Ver.7.0以降ではTForm(,"g")関数により0付の番号のテキストを作成できます。

例)

_FolderName = "Folder" + TForm(56, "g4.0")

製品詳細はこちら

回答を閉じる

Q複数のグループ変数にある同じチャンネルをまとめたい

FAQ ID:s073

Q

例えば、以下のようにGrp1,Grp2,Grp3があります。この中にch1,ch2,ch3,ch4がそれぞれあります。

このとき、各グループのch2だけで新しいグループ変数を作成することはできますか?

A

結果をResultとすれば、以下で実現可能です。

Result:grp1_ch2=Grp1:ch2
Result:grp2_ch2=Grp2:ch2
Result:grp3_ch2=Grp3:ch2

尚、自動処理したい場合には以下のようになります。

i=1
while i<=3
  grpname = "Grp"+TForm(i,"F00")
  resultch = grpname+"_ch2"

  Result:<resultch>=<grpname>:ch2

  i=i+1
end

製品詳細はこちら

回答を閉じる

Q0056のように0付の番号でファイル名・フォルダ名を生成したい。

FAQ ID:s071

A

番号順にデータを保存したいと考えていますが、1,2,3..のように並べると、エクスプローラで見たときに1,10,11...のように順番が異なってしまいます。

0056のように0をつけると順番に並ぶのでそのように出力したいです。
 回答以下のシーケンスで対応可能です。
以下のシーケンスはサブシーケンスとして作成しています。

Sequence CreateNumberString "56", 4, result

と呼び出すと、"0056"がresultに出力されます。

;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;

; 0付の番号ファイル名 [0046] を生成します
;
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

; 引数

;----------------------------------------------------------------

   _k2_numstr = PA1 ;数字の文字列を指定します
   _k2_digit = PA2 ;桁数

; Example
; _k2_numstr = "56"
; _k2_digit = 4

   _k2_number = TtoSv(_k2_numstr, "F")


   _k2_temp=""
   _k2_cnt=1
   while _k2_cnt<=_k2_digit
     if _k2_number <= 10^(_k2_digit-_k2_cnt)-1
    _k2_temp = _k2_temp+"0"
   end
   _k2_cnt=_k2_cnt+1
   end
   _k2_result = _k2_temp+TForm( _k2_number, "F00")



;戻り値
;----------------------------------------------------------------
   PA3 = k2_result ;文字列

;変数のクリーンナップ
;----------------------------------------------------------------
   Delete _k2_*

製品詳細はこちら

回答を閉じる

Qフォルダー名をグループ名とし、フォルダー内のデータをそのグループのデータとして読み込む

FAQ ID:s032

Q

例えば、下(左)のようなフォルダー構成になっていると仮定します。
Test1やTest2フォルダーを選択することで、フォルダー名をグループ変数として、それぞれのデータを下表(右)のように読み込むことができますか?

C:\TOYO
   ├ \Test1
   │    Sample1.dat
   │    Sample2.dat
   │    Sample3.dat
   │    Sample4.dat
   └ \Test1
         Sample1.dat
         Sample2.dat
         Sample3.dat
         Sample4.dat

A

以下のシーケンスで実現することができます。
ポイントは取得したグループ名を<>を使って変数として扱うことです。

;フォルダー選択
;  ダイアログボックスが表示されるので、処理したいフォルダーを選択します
;  
第2引数の”C:\”はデフォルトで開くフォルダーを指定します。
;  都合のよい場所を指定してください。

_dir = FsDlgSelectDirectory( "フォルダー選択", "C:\", 0)
  

IF TLeng(_dir) > 0
  ;フォルダー名のグループ変数を作成

  _grName = FsSplitPath( _dir, 2)
  <_grname> = GrNew()

    
  ;フォルダー内にあるファイルのリストを作成
  _FileListID = FsFileListNew
    (_dir, "*.*", 0, 0, 0)
  _n = FsFileListGetCount( _FileListID)
  _i=1
        
    WHILE _i <= _n                ;各ファイルに対して処理を実行
        
    
    _fname = FsFileListGetName( _FileListID, _i)
  
    ;データファイル読み込み

              _fid = FileOpenDSF( _fname, 0)        ;読み取り専用
      _varname = FileObjName?( _fid, 1)
      <_grname>:<_varname> = FileObjRead( _fid, 1)
      _err = FileClose(_fid)

      _i = _i+1
   END
   FsFileListClose(_FileListID)
END
  
;中間変数を削除
Delete _*

製品詳細はこちら

回答を閉じる

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

FAQ ID:s066

A

フォルダー名が日付になっていると”その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.RAW"
        Name2 = dir + "\Channel03.RAW"

    ;;;;データの読み込み
        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, data1)

        i=i+1
    End
    FsFileListClose(FID)

製品詳細はこちら

回答を閉じる

Q文字列の連結1

FAQ ID:s041

A

TAdd関数を使用します。

Result = TAdd( "ABC", "DEF")

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

製品詳細はこちら

回答を閉じる

Q文字列の連結2

FAQ ID:s042

A

+演算子を使用します。

Result = "ABC" + "DEF"

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

製品詳細はこちら

回答を閉じる

Q大文字を小文字に変換

FAQ ID:s043

A

TConv関数を使用します。

Result = TConv( "Hello", 1)

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

製品詳細はこちら

回答を閉じる

Q小文字を大文字に変換

FAQ ID:s044

A

TConv関数を使用します。

Result = TConv( "Hello", 2)

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

製品詳細はこちら

回答を閉じる

Q前にあるスペースを削除

FAQ ID:s045

A

TConv関数を使用します。

Result = TConv( " This is a pen ", 4)

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

製品詳細はこちら

回答を閉じる

Q後にあるスペースを削除

FAQ ID:s046

A

TConv関数を使用します。

Result = TConv( " This is a pen ", 5)

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

製品詳細はこちら

回答を閉じる

Q全てのスペースを削除

FAQ ID:s047

A

TConv関数を使用します。

Result = TConv( " This is a pen ", 6)

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

製品詳細はこちら

回答を閉じる

Q文字列の長さ

FAQ ID:s048

A

TLeng関数を使用します。

Result = TLeng( "This is a pen")

結果は 13 となります。

製品詳細はこちら

回答を閉じる

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

製品詳細はこちら

回答を閉じる