包含偏移输出的特殊字符的UniVerse记录

时间:2014-02-07 16:05:49

标签: c# .net universe unidata

我正在从UniVerse中的文件中读取数据,并且某些记录包含导致换行符的特殊字符。有没有办法剥去这些?有些是ASCII 255,但也有一些。我是UniVerse的新手。我正在使用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条记录左右会收到一条错误。

1 个答案:

答案 0 :(得分:1)

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

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

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

假设客户8888在02/28/14(内部日期为16861)的数量为3的小部件1234和5小部件4321的订单号10002将如下所示。 @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。

希望这有帮助。