嗨,我遇到了问题,我需要从 DataTable 中获取文本。我将 csv 文件读取到数据表中,现在想知道如何访问特定行 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ätzliche Informationen: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>
....
我现在如何获取特定英语文本的德语文本?
我试过这个没有运气:
这不起作用,编译器不知道“来自”:
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 文件的翻译列表吗?