我必须使用来自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;
}
我为您起草了一个超简单的解决方案。这样,您可以轻松地看到如何根据需要打印值。
由于此解决方案的简单性,因此不需要进一步的说明。
#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;
}
当然,还有许多其他可能的解决方案。 。 。