Как разделить запятую прочитанную строку из файла и затем сохранить ее в массиве

Это текстовый файл, который я создал

NameOfProduct, Цена, доступность.

Нефть, 20 $, да
Краска, 25 $, да
CarWax, 35 $, нет
Тормозная жидкость, 50 $, да

Я хочу прочитать эти данные из файла строка за строкой, а затем разделить их на знак запятой (,) и сохранить их в массив строк.

string findProduct(string nameOfProduct)
{
string STRING;
ifstream infile;
string jobcharge[10];
infile.open ("partsaval.txt");  //open the file

int x = 0;
while(!infile.eof()) // To get you all the lines.
{
getline(infile,STRING); // Saves the line in STRING.
stringstream ss(STRING);

std::string token;

while(std::getline(ss, token, ','))
{
//std::cout << token << '\n';
}

}
infile.close(); // closing the file for safe handeling if another process wantst to use this file it is avaliable

for(int a= 0 ;  a < 10 ; a+=3 )
{
cout << jobcharge[a] << endl;
}

}

Эта проблема:

когда я удаляю комментарий в строке, которая печатает токен, все данные печатаются идеально, однако, когда я пытаюсь напечатать содержимое массива (jobcharge []), он ничего не печатает.

0

Решение

Вы не можете сохранить строки внутри массива, он может содержать только одну строку на ячейку, и вы хотите поставить 3, также вы забыли добавить элементы внутри массива:

Вам нужен 2D массив:

string jobcharge[10][3];
int x = 0;
while(!infile.eof()) // To get you all the lines.
{
getline(infile,STRING); // Saves the line in STRING.
stringstream ss(STRING);

std::string token;
int y = 0;
while(std::getline(ss, token, ','))
{
std::cout << token << '\n';
jobcharge[x][y] = token;
y++;
}
x++;
}

Затем вы можете распечатать массив следующим образом:

for(int a= 0 ;  a < 10 ; a++ )
{
for(int b= 0 ;  b < 3 ; b++ )
{
cout << jobcharge[a][b] << endl;
}
}

Помните, что этот код полностью потерпит неудачу, если у вас более 10 строк или более 3 элементов в строке. Вы должны проверить значения внутри цикла.

1

Другие решения

вы можете fscanf() вместо

char name[100];
char price[16];
char yesno[4];

while (fscanf(" %99[^,] , %15[^,] , %3[^,]", name, price, yesno)==3) {
....
}
0

По вопросам рекламы [email protected]