2015-12-06 54 views
1

這是我在StackOverflow上的第一個問題,我非常感謝任何幫助。如何從分號(;)分隔的文件中將單詞複製到C++中的數組中?

我有一個德語單詞的文件,它的英文翻譯在每一行中用分號分隔。

它看起來是這樣的:

Hund;dog 
Katze;cat 
Pferd;horse 
Esel;donkey 
Fisch;fish 
Vogel;bird 

我創建了以下結構:

struct Entry 

{ 
    string english = "empty"; 
    string german = "empty" ; 
}; 

什麼我試圖做的是創造條件,複製每一行的第一個字的功能到字符串german,然後跳過分號並將行中的第二個單詞複製到字符串english,這應該逐行寫入變量類型爲Entry的數組中。

這是我創建的函數 - 當然它缺少幾行可以進行實際複製的行。 :)

void importFile(string fname, Entry db[]) 
{ 
    ifstream inFile; 
    inFile.open(fname); 
} 

在此先感謝。

+0

您可以使用'CSV'閱讀器讀取文件(例如搜索此網站)。但是對於這樣一種簡單的格式,你可以用'getline'將每一行讀入'std :: string',搜索分號,然後通過'std :: string'成員函數'substr'獲取子字符串。 –

回答

1

結合使用string.find()string.substr(),您可以用分隔符分隔字符串。用getline可以逐行閱讀文件。然後你需要創建新的結構並將它們添加到數組中。因此,代碼的主要部分,做了一些谷歌搜索到陣列,你可以自己找出其餘的(這不是一個代碼寫作服務)。歡迎來到SO!

string line; 
    string english, german; 
    int delimiterpos; 
    Entry mEntry; 
    ifstream myfile ("example.txt"); 
    if (myfile.is_open()) 
    { 
    while (getline (myfile,line)) 
    { 
     //line now consists of the german;english 
     delimiterpos = line.find(";"); 
     german = line.substr(0,delimiterpos); 
     english = line.substr(delimiterpos+1,line.size()); 
     //create a new struct and add it to array. 
     mEntry = new Entry(); 
     mEntry.german= german; 
     mEntry.english = english; 
     // add to some array here 
    } 
    myfile.close(); 
    } 

    else cout << "Unable to open file"; 
+0

你應該在查找後檢查'delimiterpos!= std :: string :: npos'。 –

+0

謝謝你,先生! – Mina

0

我認爲你應該首先在谷歌搜索,因爲這是一個已經回答了很多次的問題。例如這裏: Read file line by line這裏 How can I read and parse CSV files in C++?或一個 How to read-write into/from text file with comma separated values

與連接U可以輕鬆地創建這樣的代碼: 編輯:NVM。你在另一篇文章中有答案。

+0

我確實看到了這兩種解決方案,但他們都沒有回答我的問題和/或使用不允許使用的載體。 – Mina

相關問題