プロが教える店舗&オフィスのセキュリティ対策術

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

皆さんは\t以外にテキストデータの区切りにどのような制御文字を使っていますか?ちなみに改行は1レコードの区切り文字です。

A 回答 (4件)

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行)単位で扱う場合に確実にバグを産みます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/05 16:03

最強なのは、\0や\tなどの特定の文字ではありません。

ある定義した方法によってエスケープすることこそが最強であり、やるべきことだと思います。

エスケープしないと、「ある文字はデータの中で決して使ってはならない」というような、uglyな約束事ができてしまいます。例えば\0を区切りにするならば、\0を含むデータは扱えなくなりますよね。カンマでもタブでも同じです。

きちんとエスケープすれば、基本的にあらゆるデータを格納できるようになります。これぞ最強。
    • good
    • 0

(1)複数データもフィールドに分割する。

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

自信がありませんが、一般的にはこんな感じかと思います。
    • good
    • 0

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

    • good
    • 0
この回答へのお礼

早速ありがとうございます。
なるほどと思いましたが、
2^5=32とか入力してこないか心配ですね。

\0は最強だと思うのですが、経験者教えてくれませんか?

お礼日時:2007/04/05 15:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!