wer234 cwx1 20139
asd223 cwx2 09678
sda232 cwx3 45674
ukh134 cwx4 23453
plo209 cwx5 09573
How can i read data into three string array? first column into 1st string array, second column into 2nd string array, third column into 3rd string array. This is the code i tried, but the last array take into the line.
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
using namespace std;
int main(){
//load the text file and put it into a single string:
std::ifstream in("test.txt");
std::stringstream buffer;
buffer << in.rdbuf();
std::string test = buffer.str();
std::cout << test << std::endl << std::endl;
//create variables that will act as "cursors". we'll take everything between them.
size_t pos1 = 0;
size_t pos2;
//create the array to store the strings.
std::string str[5];
std::string str2[5];
std::string str3[5];
int x;
int y;
for(y=0; y<5;y++){
for ( x=0; x<3; x++){
pos2 = test.find(" ", pos1); //search for the bar "|". pos2 will be where the bar was found.
if(x==0){
str[y] = test.substr(pos1, (pos2-pos1)); //make a substring, wich is nothing more
}else if(x==1){
str2[y] = test.substr(pos1, (pos2-pos1)); //make a substring, wich is nothing more
}else if(x==2){
str3[y] = test.substr(pos1, (pos2-pos1)); //make a substring, wich is nothing more
} //than a copy of a fragment of the big string.
// std::cout << str[x] << std::endl;
// std::cout << "pos1:" << pos1 << ", pos2:" << pos2 << std::endl;
pos1 = pos2+1; // sets pos1 to the next character after pos2.
//so, it can start searching the next bar |.
}
}
for (int p=0; p<5; p++){
cout << str[p] <<endl;
cout << str2[p] <<endl;
cout << str3[p] <<endl;
}
return 0;
}
Putting the whole file in one string can be very inefficient if you consider really big files.
The goal you are trying to achieve isn't really that complicated as you'd expected(at least in c++). You can just do:
for(size_t ind = 0; ind < 5; ++ind)
in >> str[ind] >> str2[ind] >> str3[ind];
I tried it in a different way, let's understand the simple code below.
while(in.good())
{
string stri;
int i=1,a=0,b=0,c=0;
in >> stri;
switch(i%3) {
case 1:
str[a]=stri;
a++;
break;
case 2:
str2[b]=stri;
b++;
break;
case 3:
str3[c]=stri;
c++;
break;
}
i++;
}
Here variables a
, b
and c
counts array index. Every loop, it calculates (i%3)
and fills the correct array.
Code may have some issues, it is just for idea. I did not even test it.
NOTE THAT this code will work if and only if you have 3 columns.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.