从DataTable或XML中查找特定项

时间:2012-11-14 07:30:44

标签: .net xml csv datatable c++-cli

嗨,我知道我需要从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文件中的翻译列表吗?

1 个答案:

答案 0 :(得分:0)

好的,经过很长一段时间我在这里记得自己的问题。只是向任何绊倒此案的人提供反馈。

这一切都以此结束:

唯一有效的方法是拥有一个绝对没有重复的List。 因此上面的代码可以工作,但source-csv文件必须没有所需“主键”列的重复条目。 之后删除重复的条目,带有“RemoveDuplicateRows(table,L”English“);” 无效。该指数在之前被打破。

我编写了一个不同的工具(exe),我将csv文件中的重复行从此处导入此代码之前删除了它。 完成后,所有都是文件。