2014-01-19 4 views
0

Ниже приведен фрагмент файла у меня есть:прочитанной Интс из файла в массив 3D

23 //clump1.A 
45 
21 

24 //clump1.B 
235 
212 


2315 //clump2.A 
123 
14 

1234 //clump2.B 
213 
123 
213 


3112 //clump3.A 
323 
4214 

Я показал примерно 3-4 в каждом «комок», однако есть 74 числа в каждой глыбе , Существует 2 «скопления» для каждого двойного абзаца, разделенные сгустками чисел, для которых имеется 4192 больших скопления.

мне нужно следующий массив будет построен:

int array[4192][2][74], 

, например, array[2][0][1] = 3112 из приведенного выше примера.

Как я могу прочитать этот файл и получить их в правильных точках массива. Использование istringstream дает мне ошибку seg.

Я использую подобный код, как Read integers from a file into array

Пожалуйста, дайте мне знать, если я должен уточнить.

while(std::getline(file, line)){ 
    std::istringstream input(line); 
    for(j=0; j<2; j++){ 
     for(k=0; k<NUM_REGIONS; k++){ 
      input >> history[i][j][k][0]; 
     } 
    } 
    i++; 
} 

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

+0

Я не вижу логики в 'array [2] [0] [1] == 3112'. Вы можете объяснить? – 0x499602D2

+0

Это просто назначение значения для коррекции ячейки. 3112 находится в третьем «скоплении» (следовательно, 2), первом подкомплекте (следовательно, 0) и первом номере. Ну, действительно, это тоже должно быть 0, если только эта часть массива не индексируется с 0. – pkubik

ответ

0

Разве вы не можете считать новые строки флагом?

т.е.

input >> tmp; 
if tmp == /n 
    flag++; 
if flag > 2{ 
    flag = 0; 
    i++; 
    continue; 
} 
history [][][] = tmp 

Это не может быть точно хотите вы хотите, но и может изменить ... или я недоразумение ваш вопрос?

0

Прежде всего отметим, что в GetLine:

Если разделитель найден, он извлекается и удаляется.

В этом случае разделитель равен '\ n', поэтому, чтобы проверить, была ли пустая строка прочитана, вам нужно просто проверить, нет ли line. Затем вы можете использовать modulo с некоторым целым числом, чтобы подсчитать их.

while(std::getline(file, line)){ 
    if(line.empty()) { 
     ++n; 
     n %= 2; 
     if(n == 0) ++i; 
    } 
    else { 
     std::istringstream input(line); 
     for(j=0; j<2; j++){ 
      for(k=0; k<NUM_REGIONS; k++){ 
       input >> history[i][j][k][0]; 
      } 
     } 
    } 
} 
Смежные вопросы