читать данные из текстового файла - PullRequest
1 голос
/ 15 февраля 2011
  2      1     3       6    0    9    0
         2     9       5    0    0    8
         3    10       0    6    0    6
  3      1     1       0    4    0    8
         2     1       7    0    0    8
         3     5       0    4    0    5
  4      1     3      10    0    0    7
         2     5       7    0    2    0
         3     8       6    0    0    7
  5      1     4       0    9    8    0
         2     6       2    0    0    7
         3    10       0    5    0    5
  6      1     2       2    0    8    0

У меня много текстовых файлов. Формат похож на приведенный выше. Я надеюсь сохранить данные каждого столбца в другом массиве, например, col01[5] ={2,3,4,5,6} (соответствует 1-му столбцу). Как я могу это сделать? col02[15] ={1,2,3......} (соответствует данным 2-го столбца).

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

  2      1     3       6    0    9    0
  2      2     9       5    0    0    8
         3    10       0    6    0    6
  3      1     1       0    4    0    8
         2     1       7    0    0    8
  5      3     5       0    4    0    5
  4      1     3      10    0    0    7
         2     5       7    0    2    0
         3     8       6    0    0    7
  5      1     4       0    9    8    0
         2     6       2    0    0    7
         3    10       0    5    0    5
  6      1     2       2    0    8    0

Я пытался использовать istringstream и getline, но это слишком сложно. Спасибо

Ответы [ 5 ]

2 голосов
/ 15 февраля 2011

Более простым и эффективным способом было бы сканировать файл символ за символом, то есть увеличивать «i» и сравнивать для каждого значения.if (i == "") // если символ "" пробел, то ничего не делать / \ / \ if (i == 10) // если символ ascii (10), то есть ENTER, затем переключиться на col01 / \ /\ else продолжайте хранить ЦИФРЫ в col01, затем в col02 и до col07.

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

1 голос
/ 15 февраля 2011

Для этого конкретного вопроса.

Объявить 7 столбцов из 13 пробелов.

Читать строку. Первое число переходит к первому столбцу, если первый символ не является пробелом. Читает до следующего номера. Идет на 2-й цв. Повторите.

1 голос
/ 15 февраля 2011
  1. Преобразование текста в двумерный массив (, вы можете использовать это для разделения на пробелы )
  2. Transpose массив ( как этот )
  3. Чтение каждой строки массива.
1 голос
/ 15 февраля 2011

Сохраняйте std::map<int,std::vector<int>>, соединяя целые числа со столбцом, в котором они находятся. Читайте каждую строку, пока не найдете число. Вам нужно будет сделать это вручную, вы не можете использовать operator>>. Вам нужно прочитать до конца числа, чтобы определить, в каком столбце он находится, затем: the_map[the_column].push_back(the_number);

0 голосов
/ 15 февраля 2011
# include < iostream>
# include < fstream>
using namespace std;
int main()
{
  char ch;
  char str[256];
  ofstream fout("test.dat");
  if(!fout) {
    cout << "Cannot open file for output.\n";
    return 1;
  }
  fout << "This is a line of text.\n";
  fout << "This is another line of text.\n";
  fout << "This is the last line of text.\n";
  fout.close();
  if(!fout.good()) {
    cout << "An error occurred when writing to the file.\n";
    return 1;
  }
  ifstream fin("test.dat", ios::in);
  if(!fin) {
    cout << "Cannot open file for input.\n";
    return 1;
  }
  cout << "Use get():\n";
  cout << "Here are the first three characters: ";
  for(int i=0; i < 3; ++i) {
    fin.get(ch);
    cout << ch;
  }
  cout << endl;
  fin.get(str, 255);
  cout << "Here is the rest of the first line: ";
  cout << str << endl;
  fin.get(ch);
  cout << "\nNow use getline():\n";
  fin.getline(str, 255);
  cout << str << endl;
  fin.getline(str, 255);
  cout << str;
  fin.close();
  if(!fin.good()) {
    cout << "Error occurred while reading or closing the file.\n";
    return 1;
  }
  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...