• ベストアンサー

テキストファイルのデータ区切り文字(制御文字)について

テキストファイルにデータを保存しているのですが、区切り文字タブ\tはフィールドの区切りに使っています。 その状態で、仮に1つのフィールドにデータを詰め込む場合、,(カンマ)で区切った場合にデータ自体に金額の,があった場合、誤動作します。フィールドの区切りはタブ\tは普通ですが、1つのフィールドに複数データを持たせる場合の区切り文字は\0など使っても問題ないのでしょうか? 環境はWindows, Linux両方で使います。\0を使ってそれが文字列の最後とまた誤動作しても嫌です。 皆さんは\t以外にテキストデータの区切りにどのような制御文字を使っていますか?ちなみに改行は1レコードの区切り文字です。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

123\t123,456,789\t456⇒123、(123、456、789)、456 123\t"123,456",789\t456⇒123、(123,456、789)、456 123\t""123"",456,789\t456⇒123、("123"、456、789)、456 と言う感じではどうでしょう? なお、\0は最強にして最悪です。1レコード(1行)単位で扱う場合に確実にバグを産みます。

bazax
質問者

お礼

どんなバグでしょうか? 現在、\0で問題なく動いていますが、バグに遭遇していないだけかもしれませんので、教えていただけましたら幸いです。

その他の回答 (3)

  • racchoman
  • ベストアンサー率71% (20/28)
回答No.4

最強なのは、\0や\tなどの特定の文字ではありません。ある定義した方法によってエスケープすることこそが最強であり、やるべきことだと思います。 エスケープしないと、「ある文字はデータの中で決して使ってはならない」というような、uglyな約束事ができてしまいます。例えば\0を区切りにするならば、\0を含むデータは扱えなくなりますよね。カンマでもタブでも同じです。 きちんとエスケープすれば、基本的にあらゆるデータを格納できるようになります。これぞ最強。

  • quoth
  • ベストアンサー率31% (158/506)
回答No.2

(1)複数データもフィールドに分割する。(本来これが正しい姿かと思いますが。) (2)""で囲んだ文字は文字列として認識させることで、""でくるんでいない,を区切り文字とする。 (3)他に;とか:を区切り文字として使用する。(これでも文字列として使いたければ、,と同じ問題が出ます。) (4)エスケープ文字を認識させる。例えば\の後の制御文字は単なる文字と認識させて、\の付いていない制御文字を制御文字とさせる。 自信がありませんが、一般的にはこんな感じかと思います。

  • masa-it
  • ベストアンサー率37% (9/24)
回答No.1

^ ハットを使ってますね。

bazax
質問者

お礼

早速ありがとうございます。 なるほどと思いましたが、 2^5=32とか入力してこないか心配ですね。 \0は最強だと思うのですが、経験者教えてくれませんか?

関連するQ&A