C言語関係掲示板

過去ログ

No.212.ファイルから読み取った2行を1行にしたい


No.1308

ファイルから2行読みとり,1行にして出力する方法について質問です。
投稿者---sato(2002/03/24 11:25:49)


satoです。
前の質問とは直接的に関係はないのですが,
ファイルから1行読みとり,ほかにも1行読みとって,連結し,
ファイルに1行として出力しようとしていますが,できません。

ファイルから1行読みとるまではいいのですが,\nも含まれて読みとるため,
単純にstrcatやfprintf(fp1,"%s %s\n",buf1,buf2);などで,連結して
1行に出力しようとしても,一つ目の文字列で改行されてしまいます。

うまい方法がありましたら教えてください。


No.1310

Re:ファイルから2行読みとり,1行にして出力する方法について質問です。
投稿者---ともじ(2002/03/24 13:46:18)


こんにちは。

>ファイルから1行読みとるまではいいのですが,\nも含まれて読みとるため,
>単純にstrcatやfprintf(fp1,"%s %s\n",buf1,buf2);などで,連結して
>1行に出力しようとしても,一つ目の文字列で改行されてしまいます。

最初の文字列の'\n'の場所に'\0'をかぶせてしまえばいいですね。

#include <stdio.h>
#include <string.h>
int main(void)
{
	char	str1[128] = "abcdefg\n";
	char	str2[128] = "hi\n";
	
	str1[strlen(str1)-1] = '\0';
	strcat(str1,str2);
	printf("%s",str1);
}


No.1311

Re:ファイルから2行読みとり,1行にして出力する方法について質問です。
投稿者---C職人(2002/03/24 13:50:55)


>satoです。
>前の質問とは直接的に関係はないのですが,
>ファイルから1行読みとり,ほかにも1行読みとって,連結し,
>ファイルに1行として出力しようとしていますが,できません。
>
>ファイルから1行読みとるまではいいのですが,\nも含まれて読みとるため,
>単純にstrcatやfprintf(fp1,"%s %s\n",buf1,buf2);などで,連結して
>1行に出力しようとしても,一つ目の文字列で改行されてしまいます。
>
>うまい方法がありましたら教えてください。

#include <stdio.h>
#include <string.h>
#include <memory.h>

int main(int argc,char *argv[])
{
FILE *in_fp;
FILE *out_fp;
char line[256];
char temp[256]; /*ワークエリア*/

memset(line,'\0',sizeof(256));
memset(temp,'\0',sizeof(256));

/*引数の数チェック*/
if(argc != 3){
fprintf(stderr,"引数の数が不正です。\n");
return 1;
}

/*ファイルオープン*/
in_fp=fopen(argv[1],"r");
if(in_fp==NULL){
fprintf(stderr,"ファイル[%s]を開くことができませんでした。\n",argv[1]);
return 1;
}

out_fp=fopen(argv[2],"w");
if(out_fp==NULL){
fprintf(stderr,"ファイル[%s]を開くことができませんでした。\n",argv[2]);
return 1;
}

/*読み込んだ行を連結する*/
while(fgets(line,256,in_fp) != NULL){
/*改行マークのところに文字列の終了マークを代入してしまう*/
line[strlen(line)-1]='\0';

/*文字列連結*/
strcat(temp,line);
}

/*連結した内容をファイル出力*/
fprintf(out_fp,"%s\n",temp);

fclose(in_fp);
fclose(out_fp);

return 0;
}
上記のような感じでしょうか
改行がついているなら、とってしまえばいいのではないでしょうか。


No.1315

ありがとうございました。
投稿者---sato(2002/03/24 23:18:28)


satoです。
お二人のご返答通り,
# char line_01[256];
# 中略
# line_01[strlen(line_01)-1] = '\0';
でうまく連結できました。

\nを「消す」方法をずっと探していたのですが,\nを\0で「上書き」すればいいんですね。
なかなか思いつかなくて,土日で4,5時間,参考書とにらめっこしてました。
おかげさまで,あっという間に解決できました。
ありがとうございました。


戻る


「初心者のためのポイント学習C言語」 Last modified:2002.05.26
Copyright(c) 2000-2002 TOMOJI All Rights Reserved