2014-02-07 18 views
1

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

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 

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

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

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

任何帮助,将不胜感激!

目前我通过让某人直接进入并编辑数据来解决此问题,但有90,000条记录,每500条记录收到一条错误。

+1

在数据流中存在字符255是非常不寻常的,除非数据已用UTF8编码。您是否查看过UniVerse控制台屏幕(TCL)中的数据? –

+0

从DBA告诉我,一些数据是从另一个来源导入的,并且该来源包含这些特殊字符。所以,垃圾进入垃圾场..数据在控制台级别看起来很好(使用Accuterm)。 –

+0

特殊字符不会显示在实际应用程序中,但DBA可以使用他拥有的任何工具查看它们。 –

回答

1

您正试图将数据拼合成不一定适合的电子表格格式。您可能会看到以下内容之一。

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

我敢打赌你看到一个价值标记。拾取类型数据库如何工作是将数据集的整个关系放入单个记录中。在销售订单示例中,在面向表格的世界中,您将拥有一个Header表和一个Detail表。在宇宙中你有一个单一的文件。

对于数量为3的小部件1234和小部件4321的5,由客户8888在2014年2月28日放置的订单号码10002(其具有16861的内部日期)。看起来像这样。 @IM是项标记@FM是现场标记和@VM是一个值标记

@[email protected]@[email protected]@[email protected]@VM5 

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

0 - 10002 
1 - 8888 
2 - 16861 
3 - [email protected] 
4 - [email protected] 

TL; DR如果你只需要压扁我将取代CHAR(253)和CHAR(252)不同的字符。通常,当您在Universe编辑器中看到特殊字符时,它会显示为VM for VM和〜for SVM。

希望这是有帮助的。