我正在尝试使用 StreamReader 和 StreamWriter 打开文本文件(固定宽度)并修改一些特定的数据列。我有以下格式的日期将被转换为压缩的 COMP-3 字段。
020100718F
020100716F
020100717F
020100718F
020100719F
我希望能够使用 StreamReader 从文件中读取日期,然后将它们转换为压缩字段(5 个字符),然后使用 StreamWriter 输出它们。但是,我一直没有找到使用StreamWriter对特定位置进行右移的方法,开始怀疑是否可以。
我有以下代码片段。
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 动态替换文件中的数据并更改行的长度?
最佳答案
我总是发现读取输入文件、过滤/处理数据并将输出写入临时文件会更好。完成后,删除原文件(或备份),将临时文件复制过来。这样您就不会丢失一半的输入文件,以防在处理过程中出现问题。
关于c# - 使用 StreamReader 和 StreamWriter 修改文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9068541/