

いつもお世話になります。
あるバッファから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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- Windows 10 VirtualBox 7のゲストOSでの物理HDDパーティションのマウント方法 2 2023/05/04 13:01
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- その他(プログラミング・Web制作) プログラミング Python 1 2022/09/28 05:02
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Windows 10 ネットワークプリンターにファイルを直接送る方法・コマンドないですか?(´・ω・`) 3 2023/03/13 23:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
aspで作成するcsvファイルで、e...
-
ラベル(スタティックテキスト)...
-
改行について
-
C++で空Enterの入力を判...
-
VBAでCSVをExcelに取り込む時に...
-
vb.netでのリッチテキストボッ...
-
C言語の標準入力で改行しない方法
-
COBOLの改行
-
JAVA Spring 改行コードを含む...
-
改行を読み飛ばす
-
ファイルから読み取った改行文...
-
エディットボックスの改行
-
(UWSC)1行が長いので、途中改行...
-
FORTRAN95の改行について
-
1行ごとに取得して、その改行...
-
【VBA】エクセルで最後の不要な...
-
ファイル内の1行(レコード)から...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
C++で空Enterの入力を判...
-
VBAでCSVをExcelに取り込む時に...
-
改行について
-
改行を読み飛ばす
-
テキストボックス行の桁数を制...
-
C# DataGridViewのセルを改行禁...
-
LaTeX: captionの中で改行した...
-
JAVA System.out.println の ...
-
エクセルVBA 文字列領域が不足...
-
最終行の改行について
-
グレープシティのSPREAD...
-
【VBA】エクセルで最後の不要な...
-
jsp 改行コードで改行させて表...
-
ラベル(スタティックテキスト)...
-
1行ごとに取得して、その改行...
-
ファイルから読み取った改行文...
-
JavaDoc コメントの改行について
おすすめ情報