Чтение текстового файла в массив строк в C

Начните путем задавания ему этого вопроса: ", Какие виды вещей Вы хотите сделать со своим компьютером? "

Тогда выбирают ряд операций, которые соответствуют его ответу и выбирают язык, который позволяет тем вещам быть сделанными. Тем лучше, если это - простое (или simplifiable) сценарии среды (например, Applescript, Ruby, любая оболочка (Ksh, Bash, или даже .bat файлы).

причины:

  1. , Если он интересуется результатами, он, вероятно, будет более мотивирован, чем если Вы сделаете, чтобы он считал кроликов Fibonacci.
  2. , Если он получает результаты, ему нравится, он, вероятно, продумает изменения на операциях, которые Вы создаете.
  3. , Если Вы учите его, он (еще) не продолжает серьезную карьеру; там пора всегда переключить на "промышленную силу" языки позже.
5
задан Zach Conn 25 November 2009 в 22:12
поделиться

5 ответов

Разделение его на строки означает анализ текста и замену всех символов EOL (под EOL я имею в виду \ n и \ r) на 0. Таким образом, вы можете повторно использовать свой буфер и сохранить только начало каждой строки в отдельном массиве char * (всего за 2 прохода).

Таким образом, вы можете сделать одно чтение для всего файла размером + 2 анализирует, что, вероятно, повысит производительность.

6
ответ дан 14 December 2019 в 08:53
поделиться

Если у вас есть хороший способ прочитать весь файл в память, вы почти у цели. После того, как вы это сделаете, вы можете дважды просканировать файл. Один раз для подсчета строк и один раз для установки указателей строк и замены '\ n' и (и, возможно, '\ r', если файл читается в двоичном режиме Windows) на '\ 0'. В промежутках между сканированиями выделите массив указателей, теперь, когда вы знаете, сколько вам нужно.

0
ответ дан 14 December 2019 в 08:53
поделиться

Для C (в отличие от C ++) вы, вероятно, закончите использовать fgets () . Однако вы можете столкнуться с проблемами из-за ваших строк произвольной длины.

0
ответ дан 14 December 2019 в 08:53
поделиться

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

К сожалению, я не научился создавать связанные списки, но, возможно, кто-то другой может вам помочь.

0
ответ дан 14 December 2019 в 08:53
поделиться

Можно прочитать количество строк в файле (цикл fgets), а затем создать двумерный массив с первым измерением, являющимся количеством строк. +1. Затем просто перечитайте файл в массив.

Однако вам нужно будет определить длину элементов. Или сделайте подсчет для самого длинного размера строки.

Пример кода:

inFile = fopen(FILENAME, "r");
lineCount = 0;
while(inputError != EOF) {
    inputError = fscanf(inFile, "%s\n", word);
    lineCount++;
}
fclose(inFile);
  // Above iterates lineCount++ after the EOF to allow for an array
  // that matches the line numbers

char names[lineCount][MAX_LINE];

fopen(FILENAME, "r");
for(i = 1; i < lineCount; i++)
    fscanf(inFile, "%s", names[i]);
fclose(inFile);
1
ответ дан 14 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: