C ++: чтение содержимого .txt и сохранение в 2D-массив

Таким образом, у меня и моих одногруппников внезапно появляется некоторая работа сцепления под рукой. Мне было поручено создать функцию импорта, которая читает текстовый файл, который выглядит следующим образом, и сохраняет его в двухмерном массиве:
введите описание изображения здесь

Столбцы разделены табуляцией. Как только это неожиданно возникло, у меня нет всего файла проекта, и я совсем не рядом со своими старыми надежными пользователями, я попытался придумать это самым общим способом:

void signal::import_data(string filename){
ifstream file;

file.open(filename.c_str());

if(file.fail()){
cerr << "file open fail" << endl;
}else{
while(!file.eof)
{
for(int j = 0; j < NumCols; j++){
for(int i = 0; i < NumRows; i++){
file >> _data[j][i];
}
}
}
}
file.close();
}

Я делаю это правильно? Я не уверен, что потоковое вещание может обойти вкладки или нет?

2

Решение

Я думаю, что этот код:

while(!file.eof)
{
for(int j = 0; j < NumCols; j++){
for(int i = 0; i < NumRows; i++){
file >> _data[j][i];
}
}
}

следует заменить на это:

for(int j = 0; j < NumCols; j++)
{
for(int i = 0; i < NumRows; i++)
{
if ( !(file >> _data[j][i]) )
{
std::cerr << "error while reading file";
break;
}
}
if ( !file ) break;
}

Это если вы ожидаете NumCols * NumRows записи должны быть в файле, зачем явно проверять конец файла? Пусть читает, пока не прочтет NumCols * NumRows Записи читаются. Как только он прочитает, он автоматически выйдет из цикла.

Но вы должны проверить, заканчивается ли файл до NumCols * NumRows Записи читаются, поэтому я делаю это:

if ( !(file >> _data[j][i]) )
{
std::cerr << "error while reading file";
break;
}

Если файл достигает ВФ символ, ИЛИ какой-то другой сбой чтения, прежде чем он заканчивает чтение NumCols * NumRows записи, то условие в if оценил бы true и он напечатает сообщение об ошибке и разорвет цикл, он также разорвет внешний цикл, как выражение !file будет оценивать true,

Для подробного объяснения относительно того, КАК читать файлы, используя потоки C ++, прочитайте ответы из этих тем:

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]