【发布时间】:2012-02-22 12:32:47
【问题描述】:
我正在尝试使用 StreamReader 和 StreamWriter 打开一个文本文件(固定宽度)并修改一些特定的数据列。我有以下格式的日期,这些日期将被转换为压缩的 COMP-3 字段。
020100718F
020100716F
020100717F
020100718F
020100719F
我希望能够使用 StreamReader 从文件中读取日期,然后将它们转换为打包字段(5 个字符),然后使用 StreamWriter 输出它们。但是,我还没有找到一种方法来使用 StreamWriter 到一个特定的位置,并开始怀疑是否可能。
我有以下代码snip-it。
System.IO.StreamWriter writer;
this.fileName = @"C:\Test9.txt";
reader = new System.IO.StreamReader(System.IO.File.OpenRead(this.fileName));
currentLine = reader.ReadLine();
currentLine = currentLine.Substring(30, 10); //Substring Containing the Date
reader.Close();
...
// Convert currentLine to Packed Field
...
writer = new System.IO.StreamWriter(System.IO.File.Open(this.fileName, System.IO.FileMode.Open));
writer.Write(currentLine);
目前我拥有以下功能:
After:
!@#$%0718F
020100716F
020100717F
020100718F
020100719F
!@#$% = Ascii Characters SO can't display
有什么想法吗?谢谢!
更新 压缩字段 COMP-3 的信息
COBOL 系统使用压缩字段来减少文件中字段所需的字节数。请参阅以下 SO 帖子了解更多信息:Here
这是压缩在 COMP-3 中的以下日期“20120123”的图片。这是我的最终结果,我将其包括在内,因为我不确定它是否会影响可能的答案。
我的问题是如何让 StreamWriter 动态替换文件中的数据并更改行的长度?
【问题讨论】:
-
我似乎无法找到您的实际问题。如果您解释什么是压缩的 COMP-3 数据字段,可能会有所帮助。如果您告诉我们预期的结果,也可能会有所帮助。
-
请不要在标题前加上“C#”之类的前缀。这就是标签的用途。
-
经过 BCD 编码后,您将获得 二进制 数据。不要使用 StreamWriter 将其写入文件,而是使用 FileStream。
标签: c# file-io ssis streamreader streamwriter