2012-05-09 2 views
2

Я читаю файл, который имеет некоторое количество столбцов, каждая строка имеет различное количество столбцов, и они представляют собой числовые значения разной длины, и у меня есть число исправлений строк (20), как разместить каждый столбец в массив?Чтение файлов столбцов в массив

Предположим, у меня есть файл данных, как следующее (есть вкладка между каждой колонки)

20 30  10 
22 10  9  3  40 
60 4 
30 200 90 
33 320 1  22 4 

, как поместить эти столбцы в различные массив ,, что столбец 1 идет в один arrary и столбец 2 переходит в другую. Только колонка 2 имеет более 2-х значные значения, а остальные столбцы имеет 1 или две цифры значения, а некоторые столбцы являются недействительными тоже, кроме 1, 2 и 3

int main() 
{  
    ifstream infile; 
    infile.open("Ewa.dat"); 

    int c1[20], c2[20], ... c6[20]; 

    while(!infile.eof()) { 
     //what will be the code here? 
     infile >>lines; 
     for(int i = 1; i<=lines; i++) { 
      infile >> c1[i];  
      infile >> c2[i]; 
      . 
      . 
      infile >> c6 [20]; 
     } 
    } 
} 
+0

@skaffman Вы, вероятно, имел в виду, чтобы пометить C++ вместо C? – cnicutar

+0

Я хотел пометить C++, и я сделал это .. почему? –

+0

Нет, вы не отметили его вообще. Кто-то еще отредактировал и добавил тег C, а затем другой человек скорректировал тег C на C++. –

ответ

1

Вот основная идея:

Используйте 2D-массив вместо многих 1D-массивов.
Прочитайте каждую строку, используя std::string.
Затем используйте: istringstream is(str); который поможет разобрать строку и поместить в массивы, как это:

while(...) { 
    .... 
    getline(infile, str); 
    istringstream is(str); 
    j=0; 
    while(is) 
     { 
      is >> c[i][j]; 
     } 
    i++; 
    .... 
    } 

Я оставляю остальное вам.

+0

большое спасибо KingsIndian за ваше время и помощь, было действительно полезно –

1

Это может быть проще, чтобы воспользоваться некоторыми из некоторого C++ библиотеки классов, как std::vector, std::istringstream и std::string:

#include <vector> 
#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <string> 

int main() { 
    std::vector<std::vector<int> > allData; 

    std::ifstream fin("data.dat"); 
    std::string line; 
    while (std::getline(fin, line)) {  // for each line 
    std::vector<int> lineData;   // create a new row 
    int val; 
    std::istringstream lineStream(line); 
    while (lineStream >> val) {   // for each value in line 
     lineData.push_back(val);   // add to the current row 
    } 
    allData.push_back(lineData);   // add row to allData 
    } 

    std::cout << "row 0 contains " << allData[0].size() << " columns\n"; 
    std::cout << "row 0, column 1 is " << allData[0][1] << '\n'; 
} 
+0

, что было фантастически 10/10 спасибо вам большое Nate Kohl –

+0

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

+0

жаль беспокоить вас снова, в любом случае я исправил его –

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