【小技】テキスト読み込みで垂直タブを排除するには

前のトピックを表示 次のトピックを表示 Go down

【小技】テキスト読み込みで垂直タブを排除するには

投稿 by miyako on 2017-03-03, 5:45 pm

FileMakerを使用し,タブ区切りフォーマットでデータを書き出すと,いわゆる『フィールド内改行』が垂直タブ(ASCII 0x0B)として出力されます。

そのようなテキストデータを4Dで読み込むと,Macは空白,Windowsは『おとうふ』のように表示される制御文字がデータに混入して厄介です。

IMPORT TEXTコマンドは,指定したフォーム内でOn Validateフォームイベントが発生し,データを加工する機会が与えられます。

そこで,下記のようなコードを実行すれば,テキスト/文字列フィールドの垂直タブを取り除くことができます。

http://doc.4d.com/4Dv15/4D/15.4/Form-event.301-3274360.ja.html

Code:

C_LONGINT($tableNum;$fieldNum)
C_TEXT($varName)
C_POINTER($fieldPtr)

If (Form event=On Validate)
   
   ARRAY TEXT($objectNames;0)
   FORM GET OBJECTS($objectNames)
   
   For ($i;1;Size of array($objectNames))
      If (OBJECT Get type(*;$objectNames{$i})=Object type text input)
         
         RESOLVE POINTER(\
         OBJECT Get pointer(Object named;$objectNames{$i});\
         $varName;$tableNum;$fieldNum)
         If (Is table number valid($tableNum))\
             & (Is field number valid($tableNum;$fieldNum))
            
            $fieldPtr:=Field($tableNum;$fieldNum)
            $fieldType:=Type($fieldPtr->)
            
            Case of
               : ($fieldType=Is text) | ($fieldType=Is alpha field)
                  $fieldPtr->:=Replace string($fieldPtr->;Char(11);"";*)  //11:Vertical Tab
            End case
            
         End if
      End if
   End for
   
End if

ポイント

各フォームオブジェクトにメソッドを記述するのではなく,フォームメソッドで一括処理
(FORM GET OBJECTS)

テキストまたは文字列フィールドに限定
(OBJECT Get type, RESOLVE POINTER, Type)

フィールドが削除されている可能性を考慮
(Is table number valid, Is field number valid, Field)

文字コードに基づく高速な文字列置換
(Replace string / *)

miyako

投稿数 : 204
登録日 : 2016/07/05

トップに戻る Go down

前のトピックを表示 次のトピックを表示 トップに戻る


 
Permissions in this forum:
返信投稿: 不可