みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Mac fmad 16 fms 15 使用
全銀データを書き出すためのテーブル1を作成しました。
テーブル1のフィールドA(計算式)に他フィールドのデータを集約して全銀データに必要な文字列を作成
以下スクリプトステップ:
ファイルパスを変数で作成(ファイル名を.csvではなく.txtで設定)
必要なレコードを抽出、ヘッダ・データ・トレーラ・エンド レコード順にソート
コンマ区切りのcvsとして書き出し
の手順です。
テキストファイルには、行ごとにクォート "" 囲まれているのでそれを削除する方法はありますか?
マックで書き出しているからでしょうか、テキストファイルの改行コードが CR のみとなっています。
CRLFに変更したいと思ってターミナルなどを使って苦戦していますが、これをファイルメーカーだけで処理する方法などはあるでしょうか?
宜しくお願いします。
Offline
グローバルフィールドに全銀フォーマットのデータ全文を生成し、
それを「フィールド内容のエクスポート」するとか。
・FM内改行(¶)はCR(#13)が使われます。
・CRLF改行へコード変換は、Substitute(生成文; [¶;Char(13)&Char(10)])
【追記】
※ただし、
・「フィールド内容のエクスポート」の出力文字コードは
・FM内使用のUnicode(UTF-16)のままとなります。
・もし Shift_JIS に限定されると、この方法は使えません。
その場合は、
・テキストフィールドにレコードデータ1行分を連結まとめで生成して、
・その1フィールドのみをTAB形式sJISコード指定で「レコードのエクスポート」します。
・出力ファイルの改行コード変換は、外部・テキスト編集ソフトで行います。
Last edited by Hiro (2017-12-12 14:27:49)
Offline
>Hiroさん
できました。
ネットでCRLFのみで検索するとターミナルなどでの変換する記事が多かったので途方に暮れていたのですが、ファイルメーカーだけで処理できたので良かったです。ついでにテキスト情報前後のクォートも無くなって、ありがとうございます。
UTF-16で大丈夫かは今確認しています。
因みに全銀データ内にあるスペース情報は、Char()関数で作った方が良いのでしょうか?今現在は、クォート""で囲まれた半角スペース(スペースキーを押したもの)を使っています。
Offline
規則性が厳しいので Char(32) で確実性を取ったほうが良いかな。
また、文字桁数も多いから式で必要文字数分を一括生成した方が安全かと。
Substitute(10^桁数 -1; [9;Char(32)])
Offline
>Hiroさん
いろいろと詳しく解説いただきありがとうございます。
因みにこの場でお尋ねするのはお恥ずかしいですが、関数の演算子を幅広く認識していないので、せっかくいただいた
Substitute(10^桁数 -1; [9;Char(32)])
が理解できずにいます。恐縮ですが、もしよろしかったら解説いただけますか?
::追記::
実際にデータビューアに式を書き出してやってみたところ理解しました。目からウロコです。ありがとうございます。
また、確認したところUTF-16ではだめで1バイト文字のUTF-8にしてくださいと依頼が来ました。
最初に教えていただいた
フィールド内容をエクスポート Substitute(生成文; [¶;Char(13)&Char(10)])
を使った方法でUTF-8に変換する方法はないでしょうか?
Last edited by jose (2017-12-12 20:44:58)
Offline
> 関数を幅広く認識していないので、・・・・解説いただけますか?
・不定桁数のデータ文字列を規定桁数に半角スペース埋めする必要があるから、
・その生成式に利用、式は (仮に規定桁数を40桁、データ文字列を"12345"とすると)
Let([
#spc=Substitute(10^40 -1; [9;Char(32)]) //←半角スペース40個の文字列を生成する式
];
Right(#spc & "12345"; 40)
)
> UTF-16ではだめで、フィールド内容をエクスポートで UTF-8 に変換する方法はないでしょうか?
「フィールド内容をエクスポート」は生データをそのまま未加工で書き出すことを
目的とした機能なので、コード変換は無理です。
余談ですが、UTF-8が良いなら、
近親同族のUTF-16でも何とか通らないでしょうか?
実際に試してみる価値はありそうかも。
Offline
>Hiroさん
解説もご丁寧にありがとうございます。
銀行担当者に問い合わせたら、全銀データは1行122バイト(120文字列+2バイトの改行)でなくてはならないようで、コードはUTF-8でも他でも大丈夫だということですが・・・
レコードをエクポートのスクリプトを利用すれば、コードの選択はできますが、計算式で指定した改行がCRに戻されてしまうようです・・・
ウィンドウズ上ので書き出すのが一番手っ取り早いですかね?w
Offline
「nkf」とか「PowerShell」などを利用すれば、FileMakerからエクスポートしたファイルの「内容を置換」「文字コードを変更」などが行なえます。
エクスポートCSVファイルの改行コードLFをLF+CFへとスマートに変換するには?:
https://fm-aid.com/bbs2/viewtopic.php?pid=31624#p31624
nkfの使うのが良いと思います。
nkfがインストールされていない場合は、以下が参考になると思います。
http://kawatama.net/others/mac/1754レコードをエクスポートしたあとで、
AppleScriptを実行で、以下を実行すれば、改行コードが変更されます。tell application "Terminal"
do script "nkf -s -Lw /Users/user/Desktop/test.tab > /Users/user/Desktop/test2.tab"
quit
end tellレコードのエクスポー
AppleScriptを実行をFileMakerのスクリプトに組み込めば、ワンクリックで処理が完了します。
MacでCSV書き出し時のフィールド内改行を改行に変換させる方法 :
Mac OS でPowerShellを使うサンプル。
https://fm-aid.com/bbs2/viewtopic.php?pid=33002#p33002
Offline
> コードはUTF-8でも他でも大丈夫だということですが・・・
UTF-16出力サンプルを実地テストして確認検証はできませんか?
日本語特有のバイト文字の概念で書式説明されている処から、
文字コードは日本語コード Shift_JIS の公算が大と思います。
Unicode にはバイト文字の概念自体在りませんから・・・。
今回問題、・Mac環境、・ファイル出力、・文字コード変換、・改行コード変換、
などを一括解決するには プラグイン を導入するのが最善に思います。
過去ログid=6915#3を参考ください、
→ https://fm-aid.com/bbs2/viewtopic.php?pid=42233#p42233
TAB形式Shift_JISコード出力ファイルの・改行コード変換 だけなら、
直前の qb_dpさん#8レス をご覧ください。
Offline
FM16なので、TextEncode関数でSJIS変換してオブジェクトフィールドからエクスポートできます。
Offline
おぉ、知らなかった、これは朗報!!
v16では文字コード変換関数 TextEncode が標準装備されたのですネ。
しかも、改行コード変換のオプションも備わってる!
コード変換した結果テキストを、一旦 オブジェクトフィールド へ持ち替えるのがミソですネ。
次いで、そのオブジェクトフィールドを「フィールド内容のエクスポート」で出力してお終い。
テキストフィールドの内容を Shift_JIS 文字エンコードと Windows のCRLF改行コードに変換してから、
結果のオブジェクトフィールドをテキストファイルとして外部書き出しする場合、
・フィールド設定 [ テーブル::オブジェクト ; 値:TextEncode(テーブル::テキスト;"shift_jis";4) ]
・フィールド内容のエクスポート [ テーブル::オブジェクト ; "output.txt" ]
Offline
Pages: 1
[ Generated in 0.009 seconds, 11 queries executed - Memory usage: 594.74 KiB (Peak: 611.65 KiB) ]