嗨,我知道我需要从DataTable获取文本的问题。 我读了一个csv文件到datatable,现在想知道如何访问特定的行 Ma Datatable包含各种文本的翻译,并包含不同语言的列 例如
英语,德语,意大利语,法语,......
我需要的是英文文本的翻译。
我尝试了以下但没有结果:
(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ätzlicheInformationen: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>
....
我现在怎样才能得到特定文本的德语文本?
我试了这个没有运气:
这不起作用,编译器不知道“from”:
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 :(得分:0)
好的,经过很长一段时间我在这里记得自己的问题。只是向任何绊倒此案的人提供反馈。
这一切都以此结束:
唯一有效的方法是拥有一个绝对没有重复的List。 因此上面的代码可以工作,但source-csv文件必须没有所需“主键”列的重复条目。 之后删除重复的条目,带有“RemoveDuplicateRows(table,L”English“);” 无效。该指数在之前被打破。
我编写了一个不同的工具(exe),我将csv文件中的重复行从此处导入此代码之前删除了它。 完成后,所有都是文件。