【小技】テキスト読み込みで垂直タブを排除するには
【小技】テキスト読み込みで垂直タブを排除するには
FileMakerを使用し,タブ区切りフォーマットでデータを書き出すと,いわゆる『フィールド内改行』が垂直タブ(ASCII 0x0B)として出力されます。
そのようなテキストデータを4Dで読み込むと,Macは空白,Windowsは『おとうふ』のように表示される制御文字がデータに混入して厄介です。
IMPORT TEXTコマンドは,指定したフォーム内でOn Validateフォームイベントが発生し,データを加工する機会が与えられます。
そこで,下記のようなコードを実行すれば,テキスト/文字列フィールドの垂直タブを取り除くことができます。
http://doc.4d.com/4Dv15/4D/15.4/Form-event.301-3274360.ja.html
☆ポイント☆
各フォームオブジェクトにメソッドを記述するのではなく,フォームメソッドで一括処理
(FORM GET OBJECTS)
テキストまたは文字列フィールドに限定
(OBJECT Get type, RESOLVE POINTER, Type)
フィールドが削除されている可能性を考慮
(Is table number valid, Is field number valid, Field)
文字コードに基づく高速な文字列置換
(Replace string / *)
そのようなテキストデータを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- 投稿数 : 485
登録日 : 2016/07/05
Permissions in this forum:
返信投稿: 不可
|
|