【发布时间】:2018-10-26 11:27:43
【问题描述】:
我正在过滤 .csv 文件并将输出保存到 .txt 文件。问题是,我的文件和数组中有这个额外的\n 行。我不想在之后编辑 .txt 文件时删除该行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "input3.h"
int main(int argc, char **argv) {
if (argc < 3) {
printf("Aufruf: %s <anzahl> <bundesland>\n", argv[0]);
printf("Beispiel: %s 100 Bayern\n", argv[0]);
printf("Klein-/Großschreibung beachten!\n");
exit(1);
}
int anzahl = atoi(argv[1]);
char *bundesland = argv[2];
char staedte[MAX_LAENGE_ARR][MAX_LAENGE_STR];
char laender[MAX_LAENGE_ARR][MAX_LAENGE_STR];
int bewohner[MAX_LAENGE_ARR];
int len = read_file("staedte.csv", staedte, laender, bewohner);
int offset = 0;
char *a = (char*) malloc(MAX_LAENGE_ARR * sizeof(char));
for (int i = 0; i < MAX_LAENGE_ARR; ++i) {
if(strcmp(bundesland,laender[i]) == 0 && bewohner[i] >= anzahl){
int written = snprintf(a + offset, MAX_LAENGE_STR ,"Die Stadt %s hat %d Einwohner. \n", staedte[i], bewohner[i]);
offset += written;
}
}
printf("STAEDTE : %s \n", a);
write_file(&a,1);
free(a);
}
输出:
cat results.txt
Die Stadt München hat 1353186 Einwohner.
Die Stadt Nürnberg hat 505664 Einwohner.
Die Stadt Augsburg hat 264708 Einwohner.
Die Stadt Regensburg hat 135520 Einwohner.
Die Stadt Würzburg hat 133799 Einwohner.
Die Stadt Ingolstadt hat 125088 Einwohner.
Die Stadt Fürth hat 114628 Einwohner.
Die Stadt Erlangen hat 105629 Einwohner.
// a blank line at the end.
我不能更改 write_file 函数,但它是。
void write_file(char *result[], int len) {
FILE *fp = fopen("resultat.txt", "w");
if (fp == NULL){
perror("resultat.txt");
exit(1);
}
for (int i=0; i<len; i++) {
fprintf(fp, "%s\n", result[i]);
}
fclose(fp);
}
编辑 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "input3.h"
int main(int argc, char **argv) {
if (argc < 3) {
printf("Aufruf: %s <anzahl> <bundesland>\n", argv[0]);
printf("Beispiel: %s 100 Bayern\n", argv[0]);
printf("Klein-/Großschreibung beachten!\n");
exit(1);
}
int anzahl = atoi(argv[1]);
char *bundesland = argv[2];
char staedte[MAX_LAENGE_ARR][MAX_LAENGE_STR];
char laender[MAX_LAENGE_ARR][MAX_LAENGE_STR];
int bewohner[MAX_LAENGE_ARR];
int len = read_file("staedte.csv", staedte, laender, bewohner);
int count = 0;
char **a = malloc(MAX_LAENGE_ARR * sizeof(char*));
for (int i = 0; i < MAX_LAENGE_ARR; ++i) {
if(strcmp(bundesland,laender[i]) == 0 && bewohner[i] >= anzahl){
a[i] = malloc(MAX_LAENGE_STR * sizeof(char));
snprintf(a[i], MAX_LAENGE_STR ,"Die Stadt %s hat %d Einwohner.", staedte[i], bewohner[i]);
count++;
}
}
write_file(a, count);
free(a);
}
结果.txt
(null)
(null)
Die Stadt München hat 1353186 Einwohner.
(null)
(null)
(null)
(null)
(null)
【问题讨论】:
-
标题说“从文件中删除最后一个\n”,正文说“我不想删除该行”。它是哪一个?你不能忽略空行吗?
-
问题显然出在
write_file你没有显示出来...... -
不,我不想通过命令行编辑文本。 @SanderDeDycker
-
@Jabberwocky 已编辑。
-
这段代码太复杂了。为什么要额外构建一个字符串数组?直接在循环中的输出文件中使用
fprintf(),去掉a和write_file()即可。
标签: c