2012-03-16 2 views
1

Я хочу поместить файл в массив. Есть ли более эффективный способ сделать это? Я использую fgetc для получения индивидуального символа текстового файла. Вот что я до сих пор.Есть ли более эффективный способ разбора файла в массив?

while((temp_airports[i] = fgetc(airports)) != EOF) { 
     c=temp_airports[i]; 
     printf("%c",temp_airports[i]); 
     i++; 
    } 

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

+0

, не зная формат файла, трудно дать точный ответ, но просто общие. – Jack

+0

Что вы подразумеваете под форматом файла? Можете ли вы взглянуть на этот файл и помочь мне определить формат? http://ece.umd.edu/class/enee150.S2012/assignments/pr2/airports.txt –

+0

Ваш вопрос не совсем ясен. Вам нужен массив символов (например, в вашем примере) или фактически массив строк с одной строкой на строку? –

ответ

4

Используйте функцию fread в буфер полукокса из файла сразу

0

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

+2

Что ASCII делать с чем угодно? –

+2

Если файл не ASCII, а просто двоичные простые данные, вы просто «проедаете» целые структуры или целые типы, не беспокоясь о разборе. – Jack

+1

Что относительно EBCDIC? Все забывают о бедных старых EBCDIC. –

1

Прежде всего, необходимо знать размер файла, код NilObject для этого:

#include <sys/stat.h> 

off_t fsize(const char *filename) { 
    struct stat st; 

    if (stat(filename, &st) == 0) 
     return st.st_size; 

    return -1; 
} 

Затем выделить буфер с таким размером и выполнить Fread.

Смежные вопросы