Попытка fprintf определенной строки из файла читать - PullRequest
0 голосов
/ 05 апреля 2019

Я изо всех сил пытаюсь напечатать строку из файла в новый файл и, кажется, не могу ни обернуть его вокруг, ни заставить его работать, любая помощь будет великолепна.

Файл выглядит так:

New York,4:20,3:03
Kansas City,12:03,3:00
North Bay,16:00,0:20
Kapuskasing,10:00,4:02
Thunder Bay,0:32,0:31

Я пытаюсь fprintf только имена файлов в новый файл с именем theCities.txt . Логика имеет смысл в моей голове, но с точки зрения реализации, я не знаю, как я могу fprintf указатель на строку. Любая помощь будет отличной.

while (fgets(flightInfo[i], 1024, fp) > 0) {
    clearTrailingCarraigeReturn(flightInfo[i]);
    // display the line we got from the fill
    printf("  >>> read record [%s]\n", flightInfo[i]);

    char *p = flightInfo[i];
    for (;;) {
        p = strchr(p, ',');
        fp = fopen("theCities.txt", "w+");
        fprintf(fp, "%s\n", p);
        if (!p)
            break;
        ++p;
    }
    i++;
}

Ответы [ 3 ]

1 голос
/ 05 апреля 2019

Вы неправильно обрабатываете файловые указатели:

FILE *fpIn, *fpOut;
if (!(fpIn= fopen("yourfile.txt", "r"))) return -1;
if (!(fpOut=fopen("cities.txt", "w"))){fclose(fpIn); return -1;}
while (fgets(flightInfo[i], 1024, fpIn) > 0)
{
    clearTrailingCarraigeReturn(flightInfo[i]);
    // display the line we got from the fill
    printf("  >>> read record [%s]\n", flightInfo[i]);

    char *p = flightInfo[i];
    for (;;)
    {
        p = strchr(p, ',');
        fprintf(fpOut, "%s\n", p);
        if (!p) break;
        ++p;
    }

    i++;

}
fclose(fpIn);
fclose(fpOut);
0 голосов
/ 05 апреля 2019

Просто чтобы обновить то, что я сделал, я использовал метод из @Paul Ogilvie и настроил его так, чтобы я все еще мог принимать строковый аргумент cmd пути / имени файла. Затем я использовал strtok и пропустил числа, поэтому он выводил только названия городов в текстовый файл. Спасибо всем за помощь!

FILE *fpIn, *fpOut;
if (!(fpIn = fopen(argv[1], "r"))) return -1;
if (!(fpOut = fopen("theCities.txt", "w+"))) { fclose(fpIn); return -1; }
while (fgets(flightInfo[i], 1024, fpIn) > 0)
{
    clearTrailingCarraigeReturn(flightInfo[i]);
    // display the line we got from the fill
    printf("  >>> read record [%s]\n", flightInfo[i]);

    char *p = flightInfo[i];
    char *n = flightInfo[i];
    char *c = flightInfo[i];
    while(p != NULL)
    {
        p = strtok(p, ",");
        n = strtok(p, "[1-9]");
        c = strtok(p, ":");
        if (!p) break;

        while (n != NULL && c != NULL)
        {
            n = strtok(NULL, " ");
            c = strtok(NULL, " ");
        }
        fprintf(fpOut, "%s\n", p);
        p++;
        p = strtok(NULL, " ");
    }
    i++;

}
fclose(fpIn);
fclose(fpOut);
0 голосов
/ 05 апреля 2019

Ваш код имеет проблемы:

  • вы переопределяете переменную fp во вложенной области видимости, что очень запутанно.
  • вы должны открыть выходной файл только один раз перед циклом.
  • Вы должны использовать "%.*s" для вывода части строки вместо конца строки.

Вот модифицированная версия:

FILE *outp = fopen("theCities.txt", "w");
for (i = 0; fgets(flightInfo[i], 1024, fp) > 0; i++) {
    clearTrailingCarraigeReturn(flightInfo[i]);
    // display the line we got from the fill
    printf("  >>> read record [%s]\n", flightInfo[i]);

    int city_length = strcspn(flightInfo[i], ",");
    if (city_length) {
        fprintf(outp, "%.*s\n", city_length, flightInfo[i]);
    }
}
fclose(outp);
...