我正在尝试在文件的每一行的末尾添加-1。例如,file.txt是
1 4 5
2 5 9
3 5 6
但会变成
1 4 5 -1
2 5 9 -1
3 5 6 -1
我正在弄清楚如何将文本一般添加到C中的文件中,但我无法弄清楚如何将相同的文本添加到文件中的每一行,并确保新行字符放在新的最后一行之后行中的字符(在本例中为-1)。
以下是我的尝试:
FILE *f = fopen("file.txt", "w");
if (f == NULL)
{
printf("Error opening file!\n");
exit(1);
}
/* print some text */
const char *text = " -1";
fprintf(f, "%s\n", text);
非常感谢任何建议!
答案 0 :(得分:2)
只需一次读取每个char
,并在检测到行尾时打印后缀。 然后打印读取的字符。
void Append(FILE *inf, FILE *outf, const char *suffix) {
int ch;
for (;;) {
int ch = fgetc(inf);
if (ch == '\n' || ch == EOF) {
fputs(suffix, outf);
if (ch == EOF) {
break;
}
}
fputc(ch, outf);
}
}
// Error checking omitted
char tmp[L_tmpnam];
tmpnam(tmp);
FILE *inf = fopen("file.txt", "r");
FILE *outf = fopen(tmp, "w");
Append(inf, outf, " -1");
fclose(inf);
fclose(outf);
remove("file.txt");
rename(tmp, "file.txt");
答案 1 :(得分:1)
如果您同意使用两个单独的文件进行输入和输出,那么您的工作将非常轻松。实现您想要的算法可以设计如下
fopen()
] char * constvalue = "-1";
] fgets()
## 使用fprintf()
一起写入从输入文件读取的数据和常量值。某些伪代码可能看起来像
fprintf(outfile, "%s %s", readdata, constvalue);
while (fgets(infile....) != NULL)
] fclose()
] ## - > fgets()
读取并将尾随换行符\n
存储到提供的缓冲区。您可能想删除它。
答案 2 :(得分:1)
我可以使用文本编辑器为每行添加-1
,将"\r\n"
替换为" -1\r\n"
或类似,具体取决于文件的eol格式。
或者以编程方式创建一个这样的新文件:
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fr, *fw;
char buffer[10000];
fr = fopen("file.txt","rt");
if (fr == NULL) {
printf("Error opening input file\n");
return 1;
}
fw = fopen("file1.txt","wt");
if (fw==NULL) {
printf("Error opening output file\n");
fclose (fr);
return 1;
}
while (fgets(buffer, 10000, fr) != NULL) {
buffer [ strcspn(buffer, "\r\n") ] = 0; // remove trailing newline etc
fprintf(fw, "%s -1\n", buffer);
}
fclose(fw);
fclose(fr);
return 0;
}
输出文件:
1 4 5 -1
2 5 9 -1
3 5 6 -1