c# - 使用 StreamReader 和 StreamWriter 修改文件

标签 c# file-io ssis streamreader streamwriter

我正在尝试使用 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”的图片。这是我的最终结果,我已经包括在内,因为我不确定它是否会影响可能的答案。

Picture of the following date 20120123 packed

我的问题是如何让 StreamWriter 动态替换文件中的数据并更改行的长度?

最佳答案

我总是发现读取输入文件、过滤/处理数据并将输出写入临时文件会更好。完成后,删除原文件(或备份),将临时文件复制过来。这样您就不会丢失一半的输入文件,以防在处理过程中出现问题。

关于c# - 使用 StreamReader 和 StreamWriter 修改文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9068541/

相关文章:

c# - SSL 连接异常

c# - "does not contain a definition...and no extension method.."错误

java - Java 中的文件输入

c - 从文件中扫描单词的问题(在 C 中)

visual-studio - SSIS 包中的平面文件连接管理器显示 "Valid File Name Must be Selected"

ssis - 如何使用命令行从 biml 生成 ssis 包并在服务器上部署 ssis

sql - 在SSIS中导入已合并单元格的Excel

c# - 开发人员如何使用源代码控制,我试图找到在小型开发环境中进行源代码控制的最有效方法

c# - 高负载下的 ASP.Net Core 线程饥饿

c - getc 和 fscanf 之间的区别