【问题标题】:find specific item from DataTable or XML从 DataTable 或 XML 中查找特定项目
【发布时间】:2012-11-02 16:51:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    这一切都结束了:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2015-11-14
      • 1970-01-01
      • 2012-02-01
      相关资源
      最近更新 更多