Как удалить строку в файле с ANSI C? - PullRequest
0 голосов
/ 28 марта 2012

Я пытаюсь удалить строку в файле данных.

Формат данных похож на следующие записи:

4253 1

3119 1

5709 1

576 1

857 1

5859 1

5896 1

116 1

2396 1

1088 1

4180 1

Это часть файла..Я не имею права отправлять img.Каждая запись состоит из двух чисел, разделенных пробелом и разделенных невидимым символом '\ n'.В файле тысячи записей, я просто хочу удалить некоторые записи, которые бесполезны при сканировании файла.Для его реализации следует использовать язык C.

Очень жаль, что не предоставили подробный формат данных.

1 Ответ

2 голосов
/ 28 марта 2012

Файлы в C являются последовательными объектами. Если вы не навязываете им собственную структуру (например, обрабатывает NUL-символы как несуществующие), единственный реальный способ удалить символы или строки - это перезаписать их, сдвинув часть файла после немного впереди.

Вы можете сделать это на месте с такими вещами, как fseek и truncate (последний не ISO C), либо читая из одного файла и записывая в другой.

Например, следующая программа удалит строку, содержащую 11 из стандартного ввода:

#include <stdio.h>

int main (void) {
    char buff[1024];
    while (fgets (buff, sizeof(buff), stdin) != NULL)
        if (strcmp (buff, "11\n") != 0)
            printf ("%s", buff);
    return 0;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...