Чтение текстового файла и создание столбца как вектора - PullRequest
1 голос
/ 08 апреля 2020

Например, у меня есть текстовое имя файла example.txt. Он состоит из двух столбцов.

12561   60295
13561   60297
13561   60298
13461   60299
15561   60300
15161   60301
15561   60302
14561   60316
12561   60317
10562   60345
15562   60346
15562   60347
15562   60348
15562   60362
19562   60363
11562   60364
12562   60365
15563   60408
15563   60409
75563   60410
65563   60411
14563   60412
13563   60413

Я могу читать текстовые файлы после макроса:

 #include <bits/stdc++.h>
    using namespace std;

    // driver code 
    int main()
    {
      vector<int> column1; 
      vector<int> column2; 
         fstream file;
        string word, filename;

         filename = "example.txt";

         file.open(filename.c_str());

         while (file >> word)
        {
            // displaying content 
            cout << word << endl;
        }

        return 0;
    }

Что я хочу сделать, это сделать pu sh обратно первый столбец в вектор column1, а второй столбец в вектор column2.

Следовательно, выходные данные для векторов 1 и 2 будут:

vector<int> column1 {12561,13561,13561,...} 

vector<int> column2 {60295,60297,60298,...} 

1 Ответ

1 голос
/ 08 апреля 2020

просто измените

    while (file >> word)
    {
        // displaying content 
        cout << word << endl;
    }

, чтобы иметь

int n1, n2;

while (file >> n1 >> n2) {
  column1.push_back(n1);
  column2.push_back(n2);
}

и удалите бесполезную переменную слово , вы можете непосредственно читать числа, вам не нужно сначала прочитайте строку и получите из нее номер

Из этого я рекомендую вам проверить, что вы смогли открыть файл для чтения, иначе вы не сможете различить guish файл, который вы не можете прочитать ( может не существовать) и пустой файл

Например:

#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>

using namespace std;

// driver code 
int main()
{
  ifstream file("example.txt");

  if (!file)
  {
    cerr << "cannot read the file example.txt :" 
         << strerror(errno) << endl;
    return -1;
  }

  vector<int> column1; 
  vector<int> column2; 
  int n1, n2;

  while (file >> n1 >> n2) {
    column1.push_back(n1);
    column2.push_back(n2);
  }

  // display content to check
  cout << "column1:";
  for (auto v : column1)
    cout << ' ' << v;
  cout << endl << "column2:";
  for (auto v : column2)
    cout << ' ' << v;
  cout << endl;

  return 0;
}

Компиляция и выполнение:

pi@raspberrypi:/tmp $ g++ -Wall r.cc
pi@raspberrypi:/tmp $ cat example.txt 
12561   60295
13561   60297
13561   60298
13461   60299
15561   60300
15161   60301
15561   60302
14561   60316
12561   60317
10562   60345
15562   60346
15562   60347
15562   60348
15562   60362
19562   60363
11562   60364
12562   60365
15563   60408
15563   60409
75563   60410
65563   60411
14563   60412
13563   60413
pi@raspberrypi:/tmp $ ./a.out
column1: 12561 13561 13561 13461 15561 15161 15561 14561 12561 10562 15562 15562 15562 15562 19562 11562 12562 15563 15563 75563 65563 14563 13563
column2: 60295 60297 60298 60299 60300 60301 60302 60316 60317 60345 60346 60347 60348 60362 60363 60364 60365 60408 60409 60410 60411 60412 60413
pi@raspberrypi:/tmp $ chmod -r example.txt 
pi@raspberrypi:/tmp $ ./a.out
cannot read the file example.txt : Permission denied
pi@raspberrypi:/tmp $ 
...