2013-06-05 1 views
0

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

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 []) ничего не печатает.

ответ

1

Вы не можете сохранить строки внутри массива, он может содержать только одну строку на ячейку, и вы хотите поставить 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 строк или более трех элементов на строку. Вы должны проверить значения внутри цикла.

0

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

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

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