1

我正在从 UniVerse 的文件中读取数据,其中一些记录包含导致换行符的特殊字符。有没有办法把这些去掉?有些是 ASCII 255,但也有一些其他的。我对宇宙很陌生。我正在使用 C# 和 U2 Toolkit for .NET。这是我的代码:

U2Connection con = GetConnection();
UniSession us1 = con.UniSession;
UniSelectList s1 = us1.CreateUniSelectList(0);
UniFile f1 = us1.CreateUniFile("CM");
s1.Select(f1);

bool lLastRecord = s1.LastRecordRead;
List<string> lRecIdList = new List<string>();

while (!lLastRecord)
{
    string sRecID = s1.Next();

    if (!lRecIdList.Contains(sRecID))
    {
            lRecIdList.Add(sRecID);
    }
    lLastRecord = s1.LastRecordRead;
}

UniDataSet uSet = f1.ReadRecords(lRecIdList.ToArray());

int count = 1;

foreach (UniRecord item in uSet)
{
    try
    {
        Console.WriteLine(count + " - " + item.RecordID + " - " + item.Record);
        count++;
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
        count++;
    }
}

con.Close();

有了良好的数据,输出如下所示:

1 - 01*1234 - field1þfield2þfield3þfield4þfield5
2 - 01*5678 - field1þfield2þfield3þfield4þfield5

但是,如果数据中有这些特殊字符之一,比如在第一条记录的 field3 中,它看起来像这样:

1 - 01*1234 - field1þfield2þfield3
2 - 01*5678 - field4þfield5

...然后第三条记录 ID 将包含第二条记录的数据。

任何帮助,将不胜感激!

目前我正在通过让某人进入并直接编辑数据来解决这个问题,但是有 90,000 条记录,每 500 条左右的记录就有一个错误。

4

1 回答 1

1

您正在尝试将数据展平为不一定适合的电子表格格式。您可能会看到以下内容之一。

  • ASCII 255 = 项目标记。在一个记录结束而另一个记录开始的文件中分隔。
  • ASCII 254 = 字段标记。将记录分隔为字段。论文可以被认为是一个专栏。
  • ASCII 253 = 值标记。分隔列中的多个值。
  • ASCII 252 = 子值标记。分隔值内的子值。
  • ASCII 251 = 文本标记。更划界,你的大脑爆炸了吗?

我敢打赌你看到的是价值标记。Pick 类型数据库的工作原理是将数据集的整个关系放在单个记录中。在销售订单示例中,在面向表的世界中,您将有一个 Header 表和一个 Detail 表。在 Universe 中,您只有一个文件。

假设客户 8888 于 2014 年 2 月 28 日(内部日期为 16861)下订单号 10002,数量为 3 个小部件 1234 和 5 个小部件 4321。看起来像这样。@IM 是项目标记 @FM 是字段标记,@VM 是值标记

@IM10002@FM8888@FM16861@FM1234@VM4321@FM3@VM5

或者更干净。字段 0 是记录 ID。

0 - 10002
1 - 8888
2 - 16861
3 - 1234@VM4321
4 - 3@VM5

TL;DR如果您只需要展平,我将替换 char(253) 和 char(252) 不同的字符。通常,当您在 Universe 编辑器中看到特殊字符时,它会显示为 VM 的 ^ 和 SVM 的 ~。

希望这会有所帮助。

于 2014-03-03T21:36:14.317 回答