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

freadでcsvファイルを読み込んだ後、改行コードを終端文字に変換したいです。
どのように変換したらいいでしょうか?
C++初心者です。よろしくおねがいいたします。

A 回答 (4件)

Caution:


以下の回答はstrtok()の仕様を知らないとドツボにはまる可能性が非常に高くなります。
また、CSVの仕様では「改行込みのデータを許す」ためこの方法だと改行込みデータは解析不能です。

要するに一括で取ってきたファイルの中身を行単位で拾いたい、ということですよね?
であればstrtok()で分割しながら取っていくのが楽でしょう。

char *p; // fread()で読み込んだデータ本体 領域は別途malloc()等で確保
char *t; // 切り出した行の先頭を指すポインタ

...(中略)...

t = strtok(p, "\r\n");
while(t != NULL)
{
...
t = strtok(NULL, "\r\n");
}
    • good
    • 0
この回答へのお礼

わ~!まさにやりたいことです!
実際にコード書いてみたところ、とても満足いく結果が得られました☆ありがとうございました♪

お礼日時:2010/08/16 11:15

行単位に処理したいなら、freadじゃなくて、行単位での読み込み関数を使ったほうがいいです。

Cの標準関数なら、fgetsとか。
でも、本気でCSVを処理するなら、行単位ではなくて、文字単位の処理にしなくてはなりませんが。

この回答への補足

文字単位といいますとどうゆうことでしょうか?確かにcsvファイルはダブルクオーテーションなど気をつけないといけないことがあると思います。その解析のことでしょうか?

補足日時:2010/08/16 17:53
    • good
    • 0

テキストモードでfopenした場合、改行文字は'\n'、終端文字は'\0'ですから、freadで読み込んだ先のメモリバッファ中の'\n'を探して'\0'に置き換えればよいかと。


バイナリモードの場合はOS等の環境によって改行文字が違うので注意が必要です。
    • good
    • 0

C++ならgetlineの方が楽じゃないかしら。



std::ifstream stream("filepath");
std::string line;

while ( std::getline(stream,line) ) {
//...
}
    • good
    • 0

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