初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2021-05-13 16:42:40

kobayashi552
Member

UTF-8形式で書出し

ファイルメーカープロ11 win8.1 win10です。
どうかよろしくお願いします。

表題のとおりリスト(100列200レコード程度)をUTF-8形式で書出したいのですが、
ver11にはUTF-8の項目が見当たりません。

何か手立てはありますでしょうか?

ご指導お願いします。

Offline

#2 2021-05-13 17:17:37

himadanee
Guest

Re: UTF-8形式で書出し

CSVもTSVも、UTF-8ありますよ。

#3 2021-05-13 21:42:19

hrrn
Guest

Re: UTF-8形式で書出し

「フィールドデータのエクスポート順」というダイアログの
オプション「出力ファイルの文字セット」の選択肢から選択できると思いますが、
出力するファイルの種類によって、選択肢が変わるようです。

少なくとも、*.tab、*.csvでは、UTF-8は選択できるようですよ。
( Windows10 FMPA11.0v3にて確認 )

#4 2021-05-14 01:45:55

kobayashi552
Member

Re: UTF-8形式で書出し

みなさんありがとうございます。

確認した所、おっしゃるように.csvならUTF-8を選択できるようです。確認不足で申し訳ありません。
実はエクスポートするデータに見出し(フィールド名)をつける形になっているのでファイル形式は
.merでファイル名はhogehoge.csvという形で書き出しており、.merはUTF-8の選択肢がありませんでした。

ファイル形式を.csv(UTF-8)として見出し(フィールド名)を追記する方法はありますでしょうか。

Offline

#5 2021-05-14 02:00:11

kobayashi552
Member

Re: UTF-8形式で書出し

追記です。

スクリプトで新規レコードを作成して各フィールドにフィールド名を設定、処理後削除するという
やり方がネットにありました。解決!と思ったのですが、現状の見出し(.mer)には""(ダブルコーテーション)が
ついてませんので、この策では残念ながらダメなようです。

引き続きよろしくお願いします。

Offline

#6 2021-05-14 02:36:08

Hiro
Member

Re: UTF-8形式で書出し

UTF-8に変換できるのはCSVかTAB形式に限られるので、FM機能だけでMER出力は無理でしょう。
やるなら、一旦CSVで書き出したファイルを、利用可能な外部スクリプトでタイトルヘッダ行を書き加える、とか?
Win環境なら「HTA」スクリプトをEvent送信する方法が良いかな!

Offline

#7 2021-05-14 08:20:43

himadanee
Guest

Re: UTF-8形式で書出し

ヘッダファイルをあらかじめ作っておけば(オブジェクトフィールドからエクスポートも可)、copyコマンドで連結というのもできます。

バージョンアップすれば、merファイルでもUTF-8が選択できます。さすがにFM11は寿命では。

#8 2021-05-14 09:45:06

qb_dp
Member

Re: UTF-8形式で書出し

PowerShellでヘッダー行を足すのがはやいのですが、
FileMakerだけでやるなら出力用テーブルを作成し、1レコード目にヘッダー行を作成し、それ以降に出力したいテーブルからレコードをインポート、→ CSV エクスポート で良いのでは。

Offline

#9 2021-05-14 10:09:14

qb_dp
Member

Re: UTF-8形式で書出し

kobayashi552 wrote:

スクリプトで新規レコードを作成して各フィールドにフィールド名を設定、処理後削除するという
やり方がネットにありました。解決!と思ったのですが、現状の見出し(.mer)には""(ダブルコーテーション)が
ついてませんので、この策では残念ながらダメなようです。
引き続きよろしくお願いします。

出力したデータは何に使うのでしょう?
ダブルクォーテーションの有無は、CSVの仕様に沿っていれば問題ありません。

Offline

#10 2021-05-15 09:17:30

kobayashi552
Member

Re: UTF-8形式で書出し

皆さんありがとうございます。

FM11寿命ですか。バージョンアップの頻度に挫折したものの一人です。

CSVファイルは規定にそっていればどうでもいいと言うことでしたが、その後1行目以外はダブルコーテーションで
囲むよう指示されています。

おさめているFMが11である以上バージョンアップしないとUTF-8での書き出しは無理なことを伝えようと思います。

Hiro wrote:

UTF-8に変換できるのはCSVかTAB形式に限られるので、FM機能だけでMER出力は無理でしょう。
やるなら、一旦CSVで書き出したファイルを、利用可能な外部スクリプトでタイトルヘッダ行を書き加える、とか?
Win環境なら「HTA」スクリプトをEvent送信する方法が良いかな!

知識のない私ですが簡単にできるものでしょうか?
よろしければご指導ください。

Offline

#11 2021-05-15 16:38:30

himadanee
Guest

Re: UTF-8形式で書出し

powershellでSJISからUTF8に簡単に変換できるというので、FMに実装してみました。

変数を設定 [ $path; 値:Get(デスクトップパス) & "filename.mer" ]
レコードのエクスポート [ ファイル名: 「$path」; 文字セット: 「日本語 (Shift-JIS)」; フィールド順: ][ ダイアログなし]
変数を設定 [ $path; 値:Substitute ( Replace ( $path ; 1 ; 1 ; "" ) ; "/" ; "\\" ) ]
変数を設定 [ $path2; 値:Substitute ( $path ; ".mer" ; ".csv" ) ]
Event送信 [ ファイル/アプリケーションを開く; "cmd /c powershell -command \"Get-Content " & $path & " | Set-Content -Encoding utf8 " & $path2 & "\"" ]

#12 2021-05-15 17:06:27

Hiro
Member

Re: UTF-8形式で書出し

あぁ、タイトル付MERで標準書き出して、Powershell でUTF-8へ単純一括変換するのが安全確実ですネ!

Offline

#13 2021-05-16 14:26:36

kobayashi552
Member

Re: UTF-8形式で書出し

himadaneeさん、ありがとうございます。

早速試してみたいと思います。
取り急ぎお礼まで。

Offline

#14 2021-05-16 16:07:29

kobayashi552
Member

Re: UTF-8形式で書出し

himadaneeさん

結論からいきますとうまく行きました。ありがとうございます。
しかし「filename.mer」ファイルが残ってしまうので削除?したいのですがどうすればよいですか。

また、最初の書出しでmerge形式でファイル名を「filename.csv」とすれば後からの「Substitute ( $path ; ".mer" ; ".csv" )」を
除いて簡潔にできないかなどと無い知恵をしぼりましたがいずれもうまく行きませんでした。

よろしくお願いします。

Offline

#15 2021-05-16 16:46:17

kobayashi552
Member

Re: UTF-8形式で書出し

変換後、2秒ほど停止した後、cmd Remove-Itemで削除することが出来ました。

簡潔化についてはテスト中ですが、さほど時間も要さないのでこれで満足しています。

Offline

#16 2021-05-17 15:01:18

himadanee
Guest

Re: UTF-8形式で書出し

psコマンドの追加は、セミコロンで区切ればいいようです。
"cmd /c powershell -command \"Get-Content " & $path & " | Set-Content -Encoding utf8 " & $path2 & " ; Remove-Item " & $path & "\""

あとは、ファイル名(パス)にスペースがある場合の対処とかは必要かもしれません。
パス名を1つで済ますには、リダイレクトでなく中身をpsの変数に取り込んで、ファイルを削除した後書き出す、とかできそうだけど...

#17 2021-05-17 15:59:13

qb_dp
Member

Re: UTF-8形式で書出し

PowerShellでの方法は言い出しっぺなので、追記しておきます。
Shift-jisで書き出してUTF-8に変更した場合、UTF-8にあってShift-jisに無い文字が欠けてしまいます。(そういった文字がない場合は問題なし)
なので、CSV(UTF-8)でエクスポートし、タイトル行を足す方法をお勧めします。

$header=@('title01','title02','title03');
の所に追加したいタイトルを記入

PowerShell でCSVファイルの先頭にヘッダー行を追加する例:
(BOMあり)
変数を設定 [ $path; 値:Get(デスクトップパス) & "filename.csv" ]
レコードのエクスポート [ ファイル名: 「$path」; 文字セット: 「Unicode (UTF-8)」; フィールド順: test::F1 test::F2 ]
変数を設定 [ $pathWin; 値:Substitute ( Replace ( $path ; 1 ; 1 ; "" ) ; "/" ; "\\" ) ]
変数を設定 [ $PowerShell; 値:"$header=@('title01','title02','title03'); $path='{PATH}'; $data= @(Get-Content $path); $data[0]=($header -join ',') +[char]10 + $data[0]; $data | Out-File $path -Encoding UTF8;" ]
変数を設定 [ $PowerShell; 値:Substitute ( $PowerShell ; "{PATH}" ; $pathWin ) ]
Event を送信 [ ファイル/アプリケーションを開く; "powershell -windowstyle hidden -Command \"" & $PowerShell & "\"" ]

(BOMなし)
変数を設定 [ $path; 値:Get(デスクトップパス) & "filename.csv" ]
レコードのエクスポート [ ファイル名: 「$path」; 文字セット: 「Unicode (UTF-8)」; フィールド順: test::F1 test::F2 ]
変数を設定 [ $pathWin; 値:Substitute ( Replace ( $path ; 1 ; 1 ; "" ) ; "/" ; "\\" ) ]
変数を設定 [ $PowerShell; 値:"$header=@('title01','title02','title03'); $path='{PATH}'; $data= @(Get-Content $path); $data[0]=($header -join ',') +[char]10 + $data[0]; $UTF8NoBomEnc = New-Object System.Text.UTF8Encoding $False; [System.IO.File]::WriteAllLines($path, $data, $UTF8NoBomEnc);" ]
変数を設定 [ $PowerShell; 値:Substitute ( $PowerShell ; "{PATH}" ; $pathWin ) ]
Event を送信 [ ファイル/アプリケーションを開く; "powershell -windowstyle hidden -Command \"" & $PowerShell & "\"" ]

Last edited by qb_dp (2021-05-17 16:06:40)

Offline

#18 2021-05-19 13:59:15

kobayashi552
Member

Re: UTF-8形式で書出し

返信遅くなりました。
himadaneeさんありがとうございます。

himadanee wrote:

psコマンドの追加は、セミコロンで区切ればいいようです。
"cmd /c powershell -command \"Get-Content " & $path & " | Set-Content -Encoding utf8 " & $path2 & " ; Remove-Item " & $path & "\""

スクリプトの停止不要になりますね。感謝です。
パス名はファイルと同じ階層にあるフォルダに収納したくて試行錯誤しましたが、上手く動いてくれています。

qb_dpさんありがとうございます。
わざわざコードの表示感謝します。
私には敷居が高くて解読、設置には時間がかかりそうですが、テストしてみたいと
思います。

一旦閉じます。みなさん、ありがとうございました。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 557.84 KiB (Peak: 578.38 KiB) ]