Чтение данных из файла в массив - PullRequest
0 голосов
/ 20 марта 2011

Если у меня есть файл опций в следующем виде:

size = 4
data = 1100010100110010

И у меня есть массив размера 2d *, в который я хочу заполнить значения в данных, как лучше всего это сделать?Это?

Чтобы уточнить, для примера, который я имею, я бы хотел массив, подобный этому:

int [4] [4] array = {{1,1,0,0}, {0,1,0,1}, {0,0,1,1}, {0,0,1,0}}.(Не реальный код, но вы поняли).

Размер может быть действительно любым числом, хотя.

Я думаю, мне придется читать в размере, maloc массив изатем, может быть, прочитать строку, полную данных, затем перебрать каждый символ в данных, привести его к типу int и вставить в соответствующий индекс?Но я действительно понятия не имею, как это сделать, я искал какое-то время без удачи.

Любая помощь будет крутой!:)

Ответы [ 2 ]

0 голосов
/ 20 марта 2011
int process_file(int **array, char const *file_name)
{
    int size = 0;
    FILE *file = fopen(file_name, "rt");
    if(fp == null)
        return -1;//can't open file
    char line[1024]; //1024 just for example
    if(fgets(line, 1024, file) != 0)
    {
        if(strncmp(line, "size = ", 7) != 0)
        {
            fcloes(file);
            return -2; //incorrect format
        }
        size = atoi(line + 7);
        array = new int * [size];
        for(int i = 0; i < size; ++i)
            array[i] = new int [size];
    }
    else
    {
        fclose(file);
        return -2;//incorrect format
    }
    if(fgets(line, 1024, file) != 0)
    {
        if(strncmp(line, "data = ", 7) != 0)
        {
            fcloes(file);
            for(int i = 0; i < size; ++i)
                delete [] array[i];
            delete [] array;
            return -2; //incorrect format
        }
        for(int i = 7; line[i] != '\n' || line[i] != '\0'; ++i)
            array[(i - 7) / size][(i - 7) % size] = line[i] - '0';
    }
    else
    {
        fclose(file);
        for(int i = 0; i < size; ++i)
            delete [] array[i];
        delete [] array;
        return -2; //incorrect format
    }
    return 0;
}

Не забудьте удалить массив до завершения программы;

0 голосов
/ 20 марта 2011

Loops.

FILE *fp = fopen("waaa.txt", "r");
if(fp == null) { /* bleh */ return; }

int j = 0;
while(char ch = fgetc(fp)) {
    for(int i = 0; i < 4; ++i) {
        array[j][i] = ch;
    }
    ++j;
}

Я не уверен с синтаксисом fgetc (). Просто проверьте его. Он читает по одному символу за раз.

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