

いつもお世話になります。
あるバッファから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コマンドで行う方法も
考えましたが、コマンド自体イマイチわかりません。
関数またはコマンドでの方法がありましたら
よろしくお願い致します。

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 で出力するのがいいですね。
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();]にかえちゃいました。
やってることは一緒ですので。。。
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]);
}
こんなんでいかがでしょう。

No.3
- 回答日時:
あと、sedコマンドで改行を取り除きたいなら、たとえば、
Linux なんかで /usr/bin に sed が入っているとして、
=====
#!/usr/bin/sed -f
/^TEST_CODE/{
N
s/\n//
}
======
という sed スクリプトでできますが、Cプログラムの中で
やってしまうのがいいのではないですか?
それと、行をまたがる置換などは、sed よりも perl なんかの
ほうがやりやすいと思いますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
texのchapterが改行される
-
ソースコードの1行が長いとき...
-
テキストボックスに改行を含む...
-
jsp 改行コードで改行させて表...
-
テキストボックス行の桁数を制...
-
JavaMail,本文中の改行について
-
FTP受信する際、改行コードをは...
-
最終行の改行について
-
改行コード2種類を混在させたい
-
JSPでCSVのダウンロード処理
-
エクセルVBA 文字列領域が不足...
-
エスケープ文字の復帰(¥r)と...
-
(UWSC)1行が長いので、途中改行...
-
【VBA】エクセルで最後の不要な...
-
掲示板の記事の削除
-
awkで改行を除いて文字列を抜き...
-
CSVファイルの読み込み
-
VBAでCSVをExcelに取り込む時に...
-
C#における改行を含む文字の探索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
エスケープ文字の復帰(¥r)と...
-
ソースコードの1行が長いとき...
-
COBOLの改行
-
C++で空Enterの入力を判...
-
Excel VBAからBeckyを起動して...
-
【VBA】エクセルで最後の不要な...
-
エクセルVBA 文字列領域が不足...
-
テキストボックス行の桁数を制...
-
秀丸の正規表現で複数行にわた...
-
C言語の標準入力で改行しない方法
-
VBAでCSVをExcelに取り込む時に...
-
改行コード(CR/LF)の設...
-
グレープシティのSPREAD...
-
改行について
-
1行ごとに取得して、その改行...
-
ラベル(スタティックテキスト)...
-
コンボボックスの項目中に改行を
-
ファイルから読み取った改行文...
-
C# DataGridViewのセルを改行禁...
おすすめ情報