Стандартный (или удобный) метод чтения и записи табличных данных в текстовый файл на - PullRequest
3 голосов
/ 24 декабря 2011

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

Как и в python, вы можете загрузитьПолнотекстовый файл в массив по f.readlines, затем пройдитесь по всем строкам и split по каждой строке по определенному символу или последовательности символов (разделитель).

Как вы подходите к этой проблеме в C?

Ответы [ 4 ]

2 голосов
/ 24 декабря 2011

Я считаю getline() и strtok() весьма удобными (getline был расширением GNU, стандартизированным в POSIX.1-2008).

2 голосов
/ 24 декабря 2011

Вау. Я немного сбит с толку другими ответами, которые заставляют меня чувствовать, что я на Mainframes.stackexchange.com вместо stackoverflow.com

Почему бы вам не выбрать современный формат данных, такой как JSON или XML, и следовать рекомендациям для формата данных по вашему выбору?

Если вам нужен хороший JSON-читатель / писатель для C, я использовал Jansson , и это очень просто и быстро.

Если вам нужна хорошая программа чтения / записи XML для C, я использовал miniXML , и это также просто и быстро. Также есть поддержка SAX * и * DOM в зависимости от того, как вы хотите читать в XML.

Очевидно, существует множество других доступных библиотек.

Пожалуйста, не давайте следующему парню, который придет и поддержит вашу программу, какой-нибудь дурацкий пользовательский формат файла, с которым нужно иметь дело.

2 голосов
/ 24 декабря 2011

Почти так же, как и на любом другом языке. Выберите разделитель полей (I.E., tab символ), откройте текстовый файл для чтения и проанализируйте каждую строку.

Конечно, в C никогда не будет так легко, как в Python, но подходы похожи.

1 голос
/ 24 декабря 2011

Существует несколько механизмов, но есть причина, по которой языки сценариев стали настолько популярными в течение как минимум двадцати лет - некоторые задачи, которые кажутся простыми в языках сценариев, тяжелы в C.

  • Вы можете использовать flex и bison для написания парсера для ваших таблиц. Это действительно работает, только если формат очень хорошо определен и «статичен». Это удивительные инструменты, которые могут сделать больше, чем вы думаете, но это очень тяжелый механизм для того, что можно сделать просто с помощью split() на языке сценариев.

  • Вы можете читать отдельные поля, используя getdelim(3). Однако это было стандартизировано только с POSIX.1-2008, так что это далеко не повсеместно. (У каждой машины Linux с glibc должны быть они.)

  • Вы можете прочитать строки с помощью fgets(3) и обнаружить места разделения, используя strchr(3).

  • Вы можете читать строки с fgets(3) и использовать strtok(3) для токенизации строк.

  • Вы можете использовать scanf(3) для выполнения ввода и сканирования за один раз; Из приведенных здесь вопросов видно, что scanf(3) трудно использовать правильно.

  • Вы можете использовать посимвольный анализ: читайте символы с помощью getc(3), проверяйте его, что-то с ним делаете, повторяйте до тех пор, пока символов больше не будет.

...