2009-07-02 16 views
6

C++ ile sekme ile ayrılmış bir dosyada okumak ve her satırı bir kayıt olarak saklamanın en iyi yolu nedir? Bu konuda yardımcı olacak bir açık kaynak kütüphanesi arıyordum, ancak başarısız oldum, bu yüzden kendi yazmam gerekecek gibi görünüyor.C++ dosyasında ayrılmış dosyaları okuma

+1

Bunu aradığımda, basit bir şekilde bir yerden bir kodu kopyalayamadığım için çok şaşırdım. Her neyse, çözümüm için bir blog yazdım (Stack Exchange'deki diğer cevaplara dayanarak) [C++ Tidbits] (http://goo.gl/y0bOVv) – Wybird666

cevap

17
typedef vector<vector<string> > Rows; 
Rows rows; 
ifstream input("filename.csv"); 
char const row_delim = '\n'; 
char const field_delim = '\t'; 
for (string row; getline(input, row, row_delim);) { 
    rows.push_back(Rows::value_type()); 
    istringstream ss(row); 
    for (string field; getline(ss, field, field_delim);) { 
    rows.back().push_back(field); 
    } 
} 

Bu, başlatılacak. Her satırın aynı sayıda alana sahip olduğundan, field_delim, vb. Çıkışa izin verdiğinden emin değilsiniz.

+0

Bu kod, görsel stüdyosunda bot çalışması yapıyor. hata "C4430: eksik tür belirteci - int kabul edildi" hatası. string.h'yi dahil ettim – tumchaaditya

+0

Kod, g ++ ile CentOS'ta iyi derler. Çalışmak için neleri eklemediğinden emin değil misiniz? – thaweatherman

5

iostreams kullanımıyla ilgili bir sorun yoktur - her satırı getline ile string olarak okuyabilir ve daha sonra bu dize üzerinde stringstream'i kullanarak alanların üzerinde yineleme yapabilirsiniz.