逐行重复下一个逗号分隔的次数

问题描述 投票:0回答:1

我必须使用来自CSV的数据制作TXT文件。

它们当前以1,3,2,4,7,2,3,1,4,3的格式订购。当数字为1时,下一个数字为重复。

目标是使输出具有以下格式:

1

1

1

2

2

2

2

7

7

3

4

4

4

我目前只能在一个数字的下方显示一个数字,但不能显示重复的数字。任何帮助将不胜感激。这是我的第一篇文章,因此,如果有任何问题,请告诉我,谢谢!

void lectura(string archivo){
string linea; //string to save the line of numbers
vector <string> numeros; //vector to save the line 
ifstream entrada(archivo.c_str()); //open csv to read
ofstream signal( "datos_de_senial.txt", ios::out); //open csv to write

int pos =0;

while(getline(entrada, linea)){ //get the line
    istringstream in(linea); //convert to istingstream
    string num;
    if(pos==0){
        while (getline(in, num, ',')){ //get the numbers separated by ","
            numeros.push_back(num); //save to vector"numeros"
        }
        for(unsigned int x = 0; x < numeros.size(); x++) //show one number below the other,here i think the problem is
                       signal << numeros[x] << '\n';

    }
}

signal.close(); 
}

int main(int argc, char *argv[]) {
void lectura(string archivo);

string csv = "signals.csv";
lectura(csv);

return 0;
}
c++ csv numbers output comma
1个回答
0
投票

我为您起草了一个超简单的解决方案。这样,您可以轻松地看到如何根据需要打印值。

由于此解决方案的简单性,因此不需要进一步的说明。

#include <iostream>
#include <sstream>
#include <vector>
#include <iterator>
#include <regex>

std::regex re(",");

std::string csv{"1,3,2,4,7,2,3,1,4,3"};

int main() {

    // Read all data from the file
    std::vector<std::string> data(std::sregex_token_iterator(csv.begin(),csv.end(),re,-1), {});

    // iterate through data
    for (std::vector<std::string>::iterator iter = data.begin(); iter != data.end(); ++iter) {

        // Read the value
        int value = std::stoi(*iter);
        // Point to next value, the repeat count
        ++iter; 
        int repeatCount = std::stoi(*iter);

        // Now output
        for (int i=0; i < repeatCount; ++i)
            std::cout << value << "\n";
    }
    return 0;
}

当然,还有许多其他可能的解决方案。 。 。

© www.soinside.com 2019 - 2024. All rights reserved.