Разделить целые числа в файле табуляцией в массив - PullRequest
0 голосов
/ 05 мая 2020

Честно говоря, это файл из 200 тыс. Целых чисел, и я не знаю, как проверить ошибку, правильно ли я это делаю, поэтому мне нужна помощь! В каждой строке 10 целых чисел, всего 20 тыс. Строк.

Вот мой код:

void readFile(int searchValues[VALUES], string fileName, string fileExtension, string filePath){
    string fileLine;
    ifstream myFile (fileName + fileExtension);
    int currentIndex = 0;
    if (myFile.is_open()){
        while (getline(myFile,fileLine)){
            for (int i = 0; i < 10; i++){
                    searchValues[currentIndex] = stoi(fileLine.substr(0, fileLine.find('\t')));
                    fileLine = fileLine.substr(fileLine.find('\t') + 1, fileLine.length()-1);
                    currentIndex++;
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Вот рабочий пример для 3 целых чисел ... сделайте то же самое для 10.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
    FILE *fl=fopen(argv[1],"rt");
    int a,b,c,line=0;
    while (3 == fscanf(fl,"%d\t%d\t%d",&a,&b,&c))
    {
        printf(
            "line %d contains ints: %d %d %d\n",
            line++,
            a,
            b,
            c);
    }
    fclose(fl);
}

0 голосов
/ 05 мая 2020

Я не уверен, что толку от VALUES. Кроме того, если вы собираетесь поместить все 200 тысяч значений в один массив, тогда зачем читать только 10 значений? Я предполагаю, что вы собираетесь поместить каждые 10 значений, например, в отдельный массив? В любом случае, вот код, который считывает VALUES целых чисел и сохраняет их в массиве. Также обратите внимание, что параметр filePath не используется


input.txt:

0 1 2 3 4 5 6 7 8 9

#include <iostream>
#include <string>
#include <fstream>

const int VALUES = 10;

void readFile(int searchValues[VALUES], std::string fileName, std::string fileExtension, std::string filePath){

    if (!filePath.empty() && filePath.back() != '/')
        filePath.push_back('/');

    std::string fullPath = filePath + fileName + '.' + fileExtension;

    std::ifstream input(fullPath);

    if (input.is_open())
    {
        int i = 0;
        while (i < VALUES && input >> searchValues[i]) i++;
    }
}

int main()
{
    int arr[VALUES];
    readFile(arr, "input", "txt", "");

    for (int i : arr)
        std::cout << i << ' ';
}

Вывод:

0 1 2 3 4 5 6 7 8 9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...