【问题标题】:C# Access Turbo Pascal .DTA files from .NetC# 从 .Net 访问 Turbo Pascal .DTA 文件
【发布时间】:2012-06-12 19:33:05
【问题描述】:

我的问题。我有一个旧版 Turbo Pascal 程序,仍在 MS DOS 上运行。原始来源丢失了,我需要处理在 .DTA 文件中找到的信息。

我真的很想从 .Net 访问这些信息,阅读和更新。第一个明显的问题是我没有 .DTA 文件的原始数据结构。

按列自动排序读取数据是理想的,但我非常绝望地坐下来尝试手动设置字段。

我的主要问题是我不知道如何在 .Net 中读取和写入数据。

我试过了:

using (BinaryReader b = new BinaryReader(File.Open(l_path, FileMode.Open), Encoding.UTF8))

OleDbConnection myConnection = 
  new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\;
  Extended Properties=\"text;HDR=YES;FMT=FixedLength\"");
  1. 我能够检索数据;不幸的是,只有一列没有定界。所以,没有结构。
  2. 存在特殊字符(#、@ 等)。我也不知道应该使用哪种编码。

有人可以帮我从 .net 读写 Pascal .DTA 文件吗?
谢谢,莫恩

【问题讨论】:

  • 据我所知,没有以帕斯卡格式保存数据的标准格式,因此 .DTA 文件可以包含从文本到二进制帕斯卡记录到额外加密的任何内容。你对它们的格式了解多少?

标签: c# pascal turbo-pascal


【解决方案1】:

如果没记错的话,.DTA 扩展名是 Turbo Pascal 数据库工具包使用的默认扩展名(确切的名称让我无法理解)。我相信您仍然可以从 Delphi (Embarcadero) 网站下载 Turbo Pascal - 如果其中包含数据库工具包,那么这可能是您最好的选择 - 在 Turbo Pascal 中,将转换器编写为其他格式,例如 CSV。

【讨论】:

  • 感谢您的意见。另一个问题是该程序仍在积极使用(相信它!)因此,将 .DTA 文件转换为 .csv 会产生问题。我需要从后端无缝更改一些记录。这就是 .Net 程序发挥作用的地方。如果我能解释数据文件……
  • 好吧,如果您可以访问 Delphi 和 Turbo Pascal 数据库工具包,那么编写一个可以读写该遗留格式的 Delphi DLL 并非完全不切实际。但是,我认为在外国(相对于 Embarc.)开发环境中进行此操作将需要大量的逆向工程。如果您内部没有 Delphi 技能,这可能是您可以分包的事情。如果我的盘子没有那么满,我会提供帮助。
【解决方案2】:

很遗憾,文件中可能没有任何列分隔符。 Turbo Pascal 可以轻松地将记录结构简单地写入磁盘。

您将遇到三个大问题。

您肯定遇到的第一个文件——该文件肯定不是 UTF-8。 Turbo Pascal 早于 Unicode,文件中的任何文本无疑都是 ASCII。我相信您将其转换为 C# 的唯一方法是将其读取为字节并进行转换。

其次,Turbo Pascal 有一个没有 c# 等效的数据类型。文件中的文本可能存储为字符数组(很简单,只需丢弃末尾的空格)或以长度开头的字符串类型。第一个字节表示字符串中有多少个字符,接下来的字节是字符。任何超出指定长度的字节都是垃圾,应该被丢弃。

最后,Turbo Pascal 中最常见的浮点类型是非标准的。问题是 Turbo Pascal 来自大多数机器没有数学协处理器的时代,普通类型在不支持 8087 指令的机器上要快得多。

我同意 500 - Internal Server Error 在 Delphi 或 Turbo Pascal 中执行此操作会容易得多。

【讨论】:

  • 谢谢你们,感谢您的建议。这似乎是我唯一的选择。可能是时候挖掘那本帕斯卡的旧书了……
猜你喜欢
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多