みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FMP19 Windows11
お世話になっております。
質問ですが、給与の振込用csvファイルを作成しております。
小計ソート対象で従業員の持つ従業員IDをソート対象として、集計値を出力するのですが
項目名を出すのに、1番目のレコードに項目名を入れようとしたのですが、計算フィールドが入っているため
1レコード目に項目名を入力出来ません。
一回全てcsvでエクスポートして、別テーブルにインポートし、項目名を1レコ―ド目に作り再度エクスポートという方法しかないでしょうか?
宜しくお願いします。
スクリプトでやるでしょうから、エクスポートした後でヘッダ行を書き込めばいいのでは。
https://help.claris.com/ja/pro-help/con … -file.html
ご回答ありがとうございます。
教えてもらったもので以下のようにしましたが上手くいきません。
----------------------------------------------------------------------------------
変数を設定 [$export;値: Get(デスクトップパス) & "_振込.csv"]
変数を設定 [$koumoku;値: "年月,名前,銀行,支店名,口座番号,口座名義"]
レコードのエクスポート [ダイアログあり:オフ;フォルダを作成:オフ; 「$export」; 日本語(Shift-JIS)]
データファイルを開く[「$export」; ターゲット:$file]
データファイルに書き込む[ ファイル ID: $file ; データソース:$koumoku; 書き込み:URF-16 ; 改行を追加]
データファイルを閉じる[ ファイル ID: $file ]
----------------------------------------------------------------------------------
csvファイルに追加はされるのですが、文字化けしたり項目で4行くらい使ったり、最初のデータの左部分が消えてたりなど起こります。
どこが間違っているでしょうか?
ファイル形式はMargeで
拡張子は.csvで
エクスポートできるのでは。
検証不十分ですが。。
Offline
チポさんの通り、 レコードのエクスポート部分のみファイルのタイプをmargeにしたところ
フィールド名が1行生まれ、文字化けしたもの(恐らく$koumoku部分)が出てきて不完全でした。
書き出しの文字コードを適切に設定されましたか
Offline
「項目名を変更」だから、mergeでフィールド名を出しても意味がないということなのでは。
SJISでエクスポートするなら、追加の書き込みもテキストをSJISに変換してバイナリ扱いで書き込まないといけないので、使用する関数が増えますね。
ならば、
ほしい「項目名」をフィールド名としたテーブルを作り、
そこへインポート、そこからエクスポート。
でもいいのでは。。
Offline
書き出しの文字コードは Shift JIS 以外だと文字化けしてしまうので、Shift JISにして、データファイルに書き込むはUTF8とUTF16しかなかったので
両方試しましたが、ダメでした。
やはり一度インポートしてエクスポートしか方法ないでしょうか
himadaneeさんの SJISに変換してバイナリ扱い はデータファイルに書き込む際の内容の変数を変えるようなものでしょうか?
>データファイルに書き込むはUTF8とUTF16しかなかった
データがバイナリなら、この指定は無視されます。
データファイルに書き込む
が上書きしかできないので、思ったよりめんどくさかったようです。
一旦エクスポートしたデータを読み取って、ヘッダ文字列と連結して、元のファイルの先頭から書き込みます。
書き込む変数の設定は、&を使うとテキスト変換されてしまうので、バイナリ(SJIS)のままで連結するために一旦Hexに変換して連結してからバイナリに戻します。
HexDecode (
HexEncode ( TextEncode ( "年月,名前,銀行,支店名,口座番号,口座名義¶" ; "shift_jis" ; 4 ) )
&
HexEncode ( $data )
; "sjisdata" )
多分関係ないと思いますが、「データファイルの読み取り」が一度に64MBしか読めないので、エクスポートするサイズが大きいともっとめんどくさいことになります。。。
https://help.claris.com/ja/pro-help/con … -file.html
変数を設定 [$koumoku] の部分をhimadaneeさんの HexDecodeを貼り付けてみたところ、
項目名は綺麗に追加されましたが2行目のみ列数が少なくなったのと少し文字化けしました。
非常惜しかったので残念ですが、一度エクスポートしたファイルを別テーブルにインポートして再度エクスポートで凌いでみます。
皆様ありがとうございました。
「一旦エクスポートしたデータを読み取って、ヘッダ文字列と連結して、元のファイルの先頭から書き込みます。」をやってないのでは。
データファイルを開いてそのまま書き込むと、CSVの1行目のデータにヘッダを上書きしてしまいます。項目名の方が長いから「2行目のみ列数が少なくなった」のでは。
まあ、64MBのことがあるので、この方法はあんまり簡便じゃなかったです。
ご返信ありがとうございます。
現在スクリプトは
----------------------------------------------------------------------------------
変数を設定 [$export;値: Get(デスクトップパス) & "_振込.csv"]
変数を設定 [$koumoku;値:
HexDecode (
HexEncode ( TextEncode ( "年月,名前,銀行,支店名,口座番号,口座名義¶" ; "shift_jis" ; 4 ) )
&
HexEncode ( $data )
; "sjisdata" )
]
レコードのエクスポート [ダイアログあり:オフ;フォルダを作成:オフ; 「$export」; 日本語(Shift-JIS)]
データファイルを開く[「$export」; ターゲット:$file]
データファイルに書き込む[ ファイル ID: $file ; データソース:$koumoku; 書き込み:URF-16 ; 改行を追加]
データファイルを閉じる[ ファイル ID: $file ]
----------------------------------------------------------------------------------
としていますが、「一旦エクスポートしたデータを読み取って、ヘッダ文字列と連結して、元のファイルの先頭から書き込みます。」
とはどこに何を追加したら宜しいでしょうか?
データファイルを開く
の次に「データファイルを読み取る」で結果を$dataに入れてから$koumokuを設定する必要があります。
書き込む前に「データファイルの位置を設定」で0(先頭)に戻します。
書き込みはバイナリデータ扱いなので「改行を追加」オプションは不要です。
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 595.58 KiB (Peak: 612.48 KiB) ]