• ベストアンサー

改行コード

いつもお世話になります。 あるバッファからsprintf()でバッファに格納したデータを ファイルにfprintf()で書き込むと、改行コードが混入します。 char b[5][128]; for( int p=0; p<i;p++ ){ sprintf(b[p]"TEST_CODE,%s,NAME\n", data[p]); fprintf(fp, "%s", b[p]); } ファイルには、 TEST_CODE,123 ,NAME TEST_CODE,456 ,NAME と%sの後に改行コードが入ります。 TEST_CODE,123,NAME TEST_CODE,456,NAME のようにしたいです。 何か方法はありますでしょうか? 環境がLinux環境のため、sedコマンドで行う方法も 考えましたが、コマンド自体イマイチわかりません。 関数またはコマンドでの方法がありましたら よろしくお願い致します。

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

  • ベストアンサー
  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.2

改行('\n')が一つ入っているのをとりたいのなら、 for 文の中で取り除けばいいのではないですか? data[p]中の改行はそのまま残しておきたいなら あとでまた書き換えればいいですし。。 ==== for (int p = 0; ...) { char *q = strchr(data[p], '\n'); if (q != NULL) *q = '\0'; sprintf(b[p], "TEST...", data[p]); fprintf(fp, ...) if (q != NULL) *q = '\n'; } ==== ・sprintf(b[p] の次にコンマが入ってないのは何故? ・配列 b に値を設定する必要があるのですよね?そうでなければ、  sprintf しないで直接 fprintf で出力するのがいいですね。

その他の回答 (4)

noname#41708
noname#41708
回答No.5

data[]配列の文字列の一番後ろにのみ 改行コードが入っているのでしたら、 for( p=0; p<i;p++ ){  if(data[p][strlen(data[p])-1]=='\n'){   data[p][strlen(data[p])-1]='\0';  }  sprintf(b[p],"TEST_CODE,%s,NAME\n", data[p]);  fput(b[p],fp); } てな具合でどうでしょう。 windowsですが試したところ いちよ、コレで動きました。 すみません。 ファイル保存のところ勝手に [fprintf();]を[fput();]にかえちゃいました。 やってることは一緒ですので。。。

the-ai
質問者

お礼

ありがとうございます。 無事できました。

  • tig33
  • ベストアンサー率50% (6/12)
回答No.4

data[]配列に改行コードが入っているからですね。 char b[5][128]; char wbuf[32]; char *cp; int ct; for( int p=0; p<i;p++ ){ cp = data[p];  for(ct=0; (ct<strlen(data[p]) && ct < 127); ct++, cp++) {   if( ('0' <= *cp) && (*cp <= '9') ) {    wbuf[ct]=*cp;   }  }  wbuf[ct]='\0';  sprintf(b[p],"TEST_CODE,%s,NAME\n", wbuf);  fprintf(fp, "%s", b[p]); } こんなんでいかがでしょう。

the-ai
質問者

お礼

ありがとうございます。 無事できました。

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.3

あと、sedコマンドで改行を取り除きたいなら、たとえば、 Linux なんかで /usr/bin に sed が入っているとして、 ===== #!/usr/bin/sed -f /^TEST_CODE/{ N s/\n// } ====== という sed スクリプトでできますが、Cプログラムの中で やってしまうのがいいのではないですか? それと、行をまたがる置換などは、sed よりも perl なんかの ほうがやりやすいと思いますよ。

  • sinkan
  • ベストアンサー率0% (0/2)
回答No.1

それはdata[]の末尾に改行が入っているのですよね。 strtok()などでdata[p]の改行コードを落としてみてはいかがでしょうか。

関連するQ&A