0

嗨,我遇到了问题,我需要从 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 文件的翻译列表吗?

4

1 回答 1

0

好的,很长一段时间后,我在这里想起了我自己的问题。只是为了向任何偶然发现此案的人提供反馈。

这一切都结束了:

唯一可行的是拥有一个绝对没有重复的列表。所以上面的代码有效,但源csv文件不能有所需“主键”列的重复条目。 之后使用 "RemoveDuplicateRows(table, L"English" );"删除重复条目 没有效果。该索引之前已损坏。

我编写了一个不同的工具(exe),在将其导入到此代码之前,我从 csv 文件中删除了重复的行。这样做之后,一切都是文件。

于 2013-07-18T11:37:52.210 回答