Начните путем задавания ему этого вопроса: ", Какие виды вещей Вы хотите сделать со своим компьютером? "
Тогда выбирают ряд операций, которые соответствуют его ответу и выбирают язык, который позволяет тем вещам быть сделанными. Тем лучше, если это - простое (или simplifiable) сценарии среды (например, Applescript, Ruby, любая оболочка (Ksh, Bash, или даже .bat файлы).
причины:
Разделение его на строки означает анализ текста и замену всех символов EOL (под EOL я имею в виду \ n и \ r) на 0. Таким образом, вы можете повторно использовать свой буфер и сохранить только начало каждой строки в отдельном массиве char * (всего за 2 прохода).
Таким образом, вы можете сделать одно чтение для всего файла размером + 2 анализирует, что, вероятно, повысит производительность.
Если у вас есть хороший способ прочитать весь файл в память, вы почти у цели. После того, как вы это сделаете, вы можете дважды просканировать файл. Один раз для подсчета строк и один раз для установки указателей строк и замены '\ n' и (и, возможно, '\ r', если файл читается в двоичном режиме Windows) на '\ 0'. В промежутках между сканированиями выделите массив указателей, теперь, когда вы знаете, сколько вам нужно.
Для C (в отличие от C ++) вы, вероятно, закончите использовать fgets ()
. Однако вы можете столкнуться с проблемами из-за ваших строк произвольной длины.
Возможно, связанный список будет лучшим способом сделать это? Компилятору не понравится массив, не имеющий представления о его размерах. С помощью связанного списка вы можете иметь действительно большой текстовый файл и не беспокоиться о выделении достаточного количества памяти для массива.
К сожалению, я не научился создавать связанные списки, но, возможно, кто-то другой может вам помочь.
Можно прочитать количество строк в файле (цикл 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);