2015-06-29 4 views
2

У меня есть файл csv с атомными номерами с атомным номером, символом и именем. Файл в формате:Создание строкового массива из CSV

1, H, Водород
2, He, Гелий
3, Li, литий
...

Я хотел бы создать массив символов ссылочных по атомному номеру. то есть. ArrayName [32] = "Ge";

Я пытался использовать sscanf, но он не работал. грубый код ниже:

char temp[200]; 
float temp_z; 
std::string temp_ele; 
std::string temp_name; 

while(!fin.eof()) 
{ 
fin.getline(temp,200); 
sscanf(temp, "\"%f\",\"%s\", \"%s\"",&temp_z, &temp_ele, &temp_name); 

cout<<temp_z<<endl; 
cout<<temp_ele<<endl; 
cout<<temp_name<<endl; 
} 
+1

'sscanf()' должен быть, по крайней мере, работоспособным подходом. Можете ли вы показать код, который не работает, поэтому мы можем вам помочь? –

+0

Этот вопрос слишком широк. Пожалуйста, отредактируйте свой вопрос с помощью [SSCCE] (http://sscce.org). – NathanOliver

+0

совет: вы можете использовать getline с ',' в качестве разделителя, если вы примените его для строкового потока для каждой вашей строки. – Hiura

ответ

-1

Вы можете прочитать каждый элемент следующим образом:

string theStrings[200]; //initialize to correct size 
int i = 0; 
string name; 
while(!fin.eof()) 
{ 
    getline(thefilestream, name, ','); 
    theStrings[i++] = name; 
    cout<<name<<endl; 
} 
+0

Это дает мне первый элемент файла, хранящегося в имени. поэтому в моем случае просто 1. Как получить следующие два элемента? – Arland

+0

положите его в петлю! Вы также можете сохранить данные в std: vector, если хотите. вектор arlandStrings; –

+0

ОК, я понимаю, что происходит сейчас. Спасибо – Arland

1

Читайте каждую строку файла с этим циклом:

string line; 
    ifstream myfile; 
    myfile.open("myfile.txt"); 

    if(!myfile.is_open()) { 
     perror("Error open"); 
     exit(EXIT_FAILURE); 
    } 
    while(getline(myfile, line)) { 
    // Split line by comma to get what's your want 
    } 

Затем разделить каждую строку через запятую в получить каждый элемент линии.

Смежные вопросы