- ベストアンサー
ファイルから読み取った改行文字を消す方法
C言語のプログラムから、テキストファイルを読み込むと、改行文字が・になってしまい、なんだか汚くみえてしまいます。 なので、ファイルから読み取った改行文字を消す方法が知りたいです。教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス ・普通に『\n』を検索して『\0』に書き換えれば改行消去できます。 サンプル: char buff[ 256 ]; char *find; FILE *fp; ファイルのオープン : while ( fgets(buff,sizeof(buff),fp) != NULL ){ if ( (find = strchr(buff,'\n')) != NULL ){ *find = '\0'; } : 処理 : } : ファイルのクローズ
その他の回答 (4)
- asuncion
- ベストアンサー率33% (2127/6289)
テキストファイルの1行が abc だとすると、fgets関数で読み取った内容は 'a', 'b', 'c', '\n', '\0' です。 この中の'\n'を'\0'に変えれば、改行文字を除去できますね。 読み取った当該内容の長さ(strlen関数で求めます)は、'\n'までの4です。 '\n'の位置は、ゼロ始まりで3です。 そうすると、読み取った内容を格納している配列のどこを'\0'にすればよいでしょうか。
お礼
回答ありがとうございます。 文字列の長さを求めて後ろから2番目を置き換える方法もあるんですか。よく分かりました。 ちなみに僕は検索して置き換える方法を使いました。 http://park.geocities.jp/mantiskogane77/dxpage5.html
一番良いのはユニコードで読み込ませる方法ですが、それはちょっと難しいと思うので簡単に解決法を・・ 例えばファイルの内容が あいうえお だったとして char Str[ 1080 ]; という変数にファイル入力関数を使って保存したと仮定すると あいうえお、つまり5文字ですが、日本語は2バイトなので配列では10の領域を使います。 したがって改行文字はこの10番目の要素の近辺に潜んでいることになります。 そういう場合は Str[ 10 ] = '\0'; などとすれば良いでしょう。 Str[ 10 ] は10じゃなくて9とか8かもしれないのでそこは試してみてください。
お礼
回答ありがとうございます。 でも、1バイトの半角英数や2バイトのひらがななどが混じっているのでなかなか全体のサイズが分からないです・・・。
- asuncion
- ベストアンサー率33% (2127/6289)
どんなソースコードを書いて、テキストファイルを読んでいますか?
お礼
回答ありがとうございます。 fgetsで1行づつ読み込んでいます。
- Tasuke22
- ベストアンサー率33% (1799/5383)
ご質問の趣旨が今ひとつ理解できません。 汚いとは何をした時の話でしょうか。 また、改行文字を消すも何も、御自分の プログラムなら行を読込んだで、書込み や何かをする時に、改行文字を送らない だけの話ですが。方法を知りたいとは? もしかして、御自分のプログラムでは無い のでしょうか?
お礼
回答ありがとうございます。 その読み込んだ文字たちを縦にずらっと並べたとき、改行文字が・として表示され、てんてんだらけになってしまいます。それが汚く見えてしまいます。今まであまりファイル関係をプログラムしたことがないのでそれを直す方法を詳しく教えて欲しいです。お願いします。
お礼
回答ありがとうございます。 \nを検索し、それを\0に置き換えればいいのですか。 なんとなくイメージがつかめたような気がします。 頑張ります!