dポイントプレゼントキャンペーン実施中!

いつもお世話になります。

あるバッファから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コマンドで行う方法も
考えましたが、コマンド自体イマイチわかりません。

関数またはコマンドでの方法がありましたら
よろしくお願い致します。

A 回答 (5件)

改行('\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 で出力するのがいいですね。
    • good
    • 0

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();]にかえちゃいました。
やってることは一緒ですので。。。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/03 18:39

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]);
}

こんなんでいかがでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/03 18:38

あと、sedコマンドで改行を取り除きたいなら、たとえば、


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

それはdata[]の末尾に改行が入っているのですよね。


strtok()などでdata[p]の改行コードを落としてみてはいかがでしょうか。
    • good
    • 0

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