
代表
ご訪問いただきありがとうございます。
このブログでは、弊社代表が日々の開発業務の中で学んだことや、調べた内容、実際にハマったことなどを、備忘録としてまとめています。
また、技術内容を整理し、分かりやすく言語化するトレーニングも兼ねて記事を作成しています。
弊社では、
FileMakerによる業務システム開発、
Windows CE端末向けアプリケーション開発、
WordPressを利用したホームページ制作などを行っております。
同じような課題で困っている方の参考になれば幸いです。
FileMakerでは、テーブルの内容をそのままCSVとしてエクスポートするだけであれば、標準機能で簡単に出力できます。
しかし実際の業務では、フィールド内の文字によってCSVが崩れることがあります。
- フィールド内にカンマ(,)が含まれている
- 改行を含むテキストがある
- ダブルクォーテーション(”)が入っている
- Excelで開くと文字化けや先頭「0」消失が発生する
など、CSV特有の問題にハマることがよくあります。
特にExcelはCSVを独自解釈するため、「CSVとして正しい」だけでは正常に表示されないケースもあります。
このページでは、FileMakerからCSVを出力する際の方法について、備忘録的にまとめています。
CSVの基本ルール
CSV(Comma Separated Values)は、データを「カンマ区切り」で保存するテキスト形式です。
- カンマ(,)で項目を区切る
- 1行が1レコードになる
FileMakerの改行コード一覧
| 種類 | 内容 |
|---|---|
| Char ( 13 ) | CR(Carriage Return) |
| Char ( 10 ) | LF(Line Feed) |
| Char ( 13 ) & Char ( 10 ) | CRLF |
一般的なFileMakerの改行は、Char ( 13 ) が使われることが多いですが、CSVやWindows系ソフト、Excelとの連携では、CRLF(Char ( 13 ) & Char ( 10 ))が使用されるケースが多くあります。
特にCSVでは、”レコードの改行” ”Excelセル内改行”などでCRLFを使用することが多いため、用途によって使い分ける必要があります。
CRLFとは?いつ使う?
CRLFとは、「Char ( 13 ) & Char ( 10 )」を組み合わせた改行コードのことです。
Windows系のテキストファイルやCSVでは、一般的にこのCRLFが改行として使用されています。
FileMakerでCSVを扱う場合も、
・CSVのレコード改行
・Excelセル内改行
・Windows向けテキスト出力
などで使用されることが多くあります。
Quote()とは?
Quote()は、文字列をダブルクォーテーション(”)で囲むFileMakerの関数です。
Quote()が必要なケース
CSVでは次の場合、データを安全に扱うために、Quote()で囲むことが重要になります。
・カンマを含む
・改行を含む
・ダブルクォーテーションを含む
CSV出力では、列ズレや行崩れ防止のため、基本的にQuote()を使用しておくと安全です。
ダブルクォーテーションを含む場合の注意
CSV内で、データ自身にダブルクォーテーション(”)を含む場合は注意が必要です。
CSVでは、ダブルクォーテーションを文字として扱いたい場合、「””」のように2重にしてエスケープするルールがあります。
FileMakerのQuote()を使用すると、このエスケープ処理も自動で行われます。そのため、CSV生成時に手動で 「”」 を追加するよりも、Quote()を使用する方が安全です。
特に、自由入力の項目では、意図せず ” が含まれていることがあるため注意が必要です。
・商品名
・備考欄
・メモ欄
FileMakerでCSV1行を組み立てる例
FileMakerでCSVの1行を組み立てる場合は、各項目をカンマで連結して作成します。
Quote ( 商品コード ) & "," &
Quote ( 商品名 ) & "," &
Quote ( 備考 )
"001","サンプル商品","テストデータ"
複数行CSVを生成する方法
複数行のCSVを生成する場合は、「1行分のCSV文字列」を改行コード(CRLF)で連結して作成します。
基本的な考え方は、
CSV1行目 & CRLF & CSV2行目
という形になります。
行1 = Quote ( A ) & "," & Quote ( B )
行2 = Quote ( C ) & "," & Quote ( D )
csv= 行1 & Char ( 13 ) & Char ( 10 ) & 行2
"001","商品A"
"002","商品B"
また、複数行生成では、FileMakerの List() を使用する方法もあります。
ただし、環境によって改行コードが変わる場合があるため、CSV用途では明示的にChar ( 13 ) & Char ( 10 )を使用する方が安全なケースもあります。
特にExcel連携やWindows向けCSVでは、CRLFを使用する方法が安定しやすいです。
TextEncode()でUTF-8化する
CSVをExcelで開く場合、文字コードによっては日本語が文字化けすることがあります。
その対策としてよく使用されるのが、FileMakerの TextEncode() 関数です。
TextEncode ( csvデータ ; "utf-8" ; 1 )
とすることで、CSVデータをUTF-8形式へ変換できます。
第3引数を「1」にすると、BOM付きUTF-8となり、Excelでも文字化けしにくくなります。
・日本語を含むCSV
・Excelで開くCSV
・他システムへ渡すCSV
特に上記では、UTF-8 + BOM付きにしておくと安全なケースが多くあります。
Excelで開くと崩れる原因
CSVは単純なテキストファイルですが、Excelで開くと自動変換が行われるため、意図しないデータ変換が発生することがあります。
代表的な例を以下にまとめます。
| 症状 | 原因 | 対策 |
|---|---|---|
| 文字化け | UTF-8を正しく認識していない | TextEncode()でUTF-8+BOM付きにする |
| 先頭の0が消える | Excelが数値として解釈する 例:00123→123 | Quote()で囲む Excelインポートを使用 |
| 日付に変換される | 「1-2」などを日付扱いする 例:「1-2」→1月2日 | 文字列扱いにする |
| 長い数字が変わる | 指数表記へ自動変換される | 文字列として出力する |
| 勝手に数値変換される | Excelの自動判定 | CSV直接開きではなくインポート使用 |
よく使うCSV生成パターン集
セル内改行
Excelのセル内で改行したい場合は、CRLFをQuote()内に含めます。
Quote (
"1行目" &
Char ( 13 ) & Char ( 10 ) &
"2行目"
)
| 001 | Apple | 青森 岩手 |
改行なし
フィールド内の改行を削除して、1行データとして出力したい場合。
Substitute (
テキスト ;
Char ( 13 ) ; "" ;
Char ( 10 ) ; ""
)
#必要に応じて、スペースへ置換する
Substitute (
テキスト ;
Char ( 13 ) ; " " ;
Char ( 10 ) ; " "
)
空白対策
空白だけのデータを判定したい場合。
If (
IsEmpty ( TrimAll ( テキスト ; 1 ; 1 ) ) ;
"" ;
Quote ( テキスト )
)
#不要なスペースのみのデータを除外
NULL対策
値が空の場合でも、CSV崩れを防ぐため空文字を返す例。
Case (
IsEmpty ( テキスト ) ;
Quote ( “” ) ;
Quote ( テキスト )
)
#空のデータもCSV列数を維持
"001","","テスト"
安全寄りの基本形
基本的に全項目をQuote()で囲む形が安全です。
カンマ・改行・ダブルクォーテーション混在時でも、CSV崩れを防ぎやすくなります。
Quote ( A ) & “,” &
Quote ( B ) & “,” &
Quote ( C )
よくあるミスまとめ
| 症状 | 原因 | 対策 |
|---|---|---|
| 列がズレる | Quote不足 | |
| 行が増殖する | 改行未囲み | |
| “”が増える | Quote重複 | |
| 文字化けする | UTF-8問題 |
まとめ
CSVはシンプルな形式ですが、実際には「カンマ」「改行」「Quote(”)」の扱いが非常に重要です。
特に次のデータでは、Quote()による適切な囲み処理を行わないと、列ズレや行崩れの原因になります。
- カンマを含む
- 改行を含む
- ダブルクォーテーションを含む
また、ExcelはCSVを独自解釈するため、次の事象が発生することがあります。
- 文字化け
- 先頭0消失
- 日付への自動変換
- 数値の指数表記化
そのため、実務では
・UTF-8 + BOM付き
・全項目をQuote()で囲む
という形にしておくと、トラブルを減らしやすく安全です。
問い合わせは無料です(^^♪
