2013-05-04 5 views
0

У меня есть текстовый файл с множеством значений int, первые 2 строки имеют значение L и C, а затем пробел, после чего группа строк с значениями int, разделенными пробелами, первое значение имеет размер из массива, который я хочу создать с последующими цифрами. После того, как эта группа добавит другую, разделенную пустой строкой из предыдущей, которая имеет тот же состав, но я хочу сохранить ее в другой группе o массивов. Как прочитать этот файл и сохранить значения L, C и для следующих 2 групп. Как создать массив на строку?Как создать группу массивов из текстового файла со значениями int?

например:

5  
5  

1 2  
1 4  
1 4  
2 5 6  
3 1 4 2  

3 5 1 1  
1 2  
2 3 2   
1 2    
1 3    
+0

Нужно ли использовать C – aaronman

+2

@aaronman: Почему бы не использовать C? Ваш ответ на «как это сделать в langauge Y» означает «использовать другой язык»? –

+0

Что-то вроде этого можно сделать в очень немногих строках с языком, подобным python – aaronman

ответ

1

Вы знаете, что вы можете использовать указатель как массив? И из этого следует, что вы можете использовать указатель на указатель как массив массивов. И вам нужно два из них, по одному для каждой группы.

Что-то вроде этого:

int **arrays[2]; /* Array of two pointer-to-pointers */ 

После прочтения первых два номеров вы можете выделить массив второго уровня:

arrays[0] = malloc(sizeof(int *) * first_number); /* Allocate for first group */ 

Затем после прочтения каждой строки группы вы можете затем распределите второй уровень:

arrays[0][i] = malloc(sizeof(int) * size_from_line); 

И, наконец, положить в номера в suita подстроки:

arrays[0][i][j] = some_number; 

Надеюсь, это должно дать достаточно информации для его реализации.

Примечание: Если вам нужно перезагрузить эти данные, не забудьте указать free все выделенные данные.

1
#include <stdio.h> 
#include <stdlib.h> 

int **readGroup(FILE *fp, int rows){ 
    int **gp, counter = 0; 

    gp=malloc(rows*sizeof(int*)); 
    for(counter = 0; counter < rows ; ++counter){ 
     int i,data,size; 

     fscanf(fp, " %d", &size);//size of trailing 
     gp[counter] = malloc((size+1)*sizeof(int));//+1 for size 
     gp[counter][0] = size;//store size to top 
     for(i=1;i<=size;++i){ 
      fscanf(fp, " %d", &data); 
      gp[counter][i] = data; 
     } 
    } 
    return gp; 
} 

int main(void){ 
    FILE *fp; 
    int L,C; 
    int **group[2]; 

    fp = fopen("data.txt", "r"); 

    fscanf(fp, " %d", &L); 
    fscanf(fp, " %d", &C); 

    group[0] = readGroup(fp, L); 
    group[1] = readGroup(fp, C); 

    fclose(fp); 
    {// check print 
     int gp,r,i,size; 
     int rows[] = {L, C}; 
     for(gp=0;gp<2;++gp){ 
      for(r=0;r<rows[gp];++r){ 
       int size = group[gp][r][0]; 
       for(i=1;i<=size;++i) 
        printf("%d ", group[gp][r][i]); 
       printf("\n"); 
      } 
      printf("\n"); 
     } 
    } 
    //deallocate 
    return 0; 
} 
+0

Это не проверка соответствия формату , – BLUEPIXY

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