2012-11-14 53 views
0

嗨我有這個問題,我需要從DataTable中獲取文本。 我讀了一個csv文件到數據表,現在想知道我怎樣才能訪問一個特定的行 Ma Datatable包含各種文本的翻譯,並有不同語言的列 從DataTable或XML中找到特定的項目

英語,德語,意大利語,法語,...

我需要得到的是翻譯的英文文本。

我試過沒有結果如下:

(CSV文件有一些重複,所以我將其刪除。)

printf("reading csv file...\n"); 
DataTable^ table = GetDataTable(L"LangTexts.csv", '|'); 
DataSet^ data = gcnew DataSet("LANGS"); 
printf("removing duplicate rows...\n"); 
RemoveDuplicateRows(table, L"English"); 
table->TableName = "LanguageText"; 
table->Namespace = "Nmspce"; 
printf("saving as XML\n"); 
data->WriteXml("LangTexte.xml"); 

table->PrimaryKey = gcnew array<DataColumn^> {table->Columns["English"]}; 

//不起作用,它說的列不是唯一的(Zusätzliche信息詳細信息:Diese Spalten haben momentan keine eindeutigen Werte)

那之後,我有一個XML文件,它看起來就像是:

<?xml version="1.0" standalone="yes"?> 
<Nmspce> 
    <LanguageText xmlns="Nmspce"> 
    <English>Back</English> 
    <Deutsch>Zurück</Deutsch> 
    <Français>Retour</Français> 
    <Svenska>Tillbaka</Svenska> 
    <Português>voltar</Português> 
    <Español>Volver</Español> 
    <Slovensko>Nazaj</Slovensko> 
    <Polski>Powrot</Polski> 
    <Suomi>Takaisin</Suomi> 
    <Nederlands /> 
    <Česky>Zpět</Česky> 
    <Italiano>Indietro</Italiano> 
    <Română>Înapoi</Română> 
    </LanguageText> 
.... 

我該如何獲得德語文本的特定enlisch文本?

我想這沒有運氣:

這是不行的,「從」不被編譯器知道:

String ^strToGet = "Torque"; 
    String^ sDeutsch = (From DataRow dr in table->Rows where safe_cast<String^>(table["English"]) 
          == strToGet select (String^)table["German"])->FirstOrDefault(); 

這不工作,filteredrows數組爲空:

array<DataRow^>^ filteredRows = table->Select(String::Format("'{0}' like '%{1}%'", "English", strToGet)); 
    String^ res; 
    if(filteredRows != nullptr && filteredRows->Length > 0) 
     res = cli::safe_cast<String^>(filteredRows[0]["Deutsch"]); 
    else 
     res= strToGet; 

這抱怨說,該表沒有主鍵:

DataRow^ r = table->Rows->Find(strToGet); 
if(r != nullptr) 
{ 
    String^ sDe = cli::safe_cast<String^>(r["Deutsch"]); 
} 

我該怎麼辦才能解決問題? 或者您是否有更好的方式處理來自csv文件的翻譯列表?

回答

0

好的,經過很長時間我在這裏記得我自己的問題。只是給任何st upon不安的人提供反饋。

這一切都結束了與此:

只有件事的工作原理是具有帶有絕對沒有重複列表。 所以上面的代碼有效,但是source-csv文件不能有所需的「主鍵」 - 列的重複條目。 之後刪除重複條目「RemoveDuplicateRows(table,L」English「);」 沒有效果。該指數之前被打破。

我寫了一個不同的工具(exe)與我從csv文件中刪除重複的行之前,我將它導入到此代碼。 完成後,所有文件。