vb.net - 让 string.substring(N) 在 N > string.length 时不窒息

标签 vb.net string

我正在编写一些代码,从大型机获取报告并将其转换为电子表格。

他们无法编辑 MF 上的代码来给我一个带分隔符的文件,所以我只能将其作为固定宽度处理。

它现在工作正常,但在发布它进行测试之前我需要让它更稳定。

我的问题是,在任何给定的数据行中,假设它可能有三列数字,每列在位置 10、16 和 22 处有五个字符宽。如果在这一特定行上,最后两个没有数据cols,它不会用空格填充;相反,字符串的长度将只有 14。所以,我不能盲目地拥有

dim s as string = someStream.readline
a = s.substring(10, 5)
b = s.substring(16, 5)
c = s.substring(22, 5)

因为当它的子字符串超过字符串的长度时它会阻塞。

我知道我可以在处理每一行之前测试字符串的长度,并且我已经使用计数器和循环自动填充一些 vsariables,并使用 counter*theWidthOfTheGivenVariable 来跳来跳去,但这个项目一开始就是狗(来吧!把报告变成电子表格?),但是有许多不同类型的行(它不仅仅是一个网格),而且代码变得越来越丑陋。对于在我之后得到它的可怜傻瓜,我希望它是干净、清晰和可维护的。

如果重要,here's my code so far (目前真的很糟糕)。你可以在 processSection#data subs 中看到我/它的一些白痴

所以,我想知道

1) .NET 中是否有一种方法可以让 string.substring 在读取超过字符串结尾而不将其包装在 try...catch 中时不出错?

2) 在这种情况下编写一个新的字符串类是否合适,该类继承自具有更友好的子字符串函数的字符串?

ETA:感谢大家提供的所有建议和知识。我会继续扩展。 希望这些年中的某一年,我能振作起来,以实物返回某人。 :)

最佳答案

我会以不同的方式实现整个事情 -

现在,您必须至少解析 3 次从大型机发送的每个字符:创建字符串时一次,解析字符串时一次,为每个新变量创建字符串时一次。对于固定宽度的行,我会选择一个逐个字符地从流中读取的状态机。这并不像听起来那么难,而且它会更好地执行加载,因为它只处理每个字符一次。如果您查看 String.Format() 等函数,这就是 .Net 框架本身处理此类事情的方式。

关于vb.net - 让 string.substring(N) 在 N > string.length 时不窒息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2417841/

相关文章:

vb.net - 项目 : In order to evaluate an indexed property, 属性必须被限定并且参数必须由用户明确提供。

c# - 多维数组不实现 IEnumerable<T>,或者它们实现了吗?

.net - 从 RichTextBox 复制文本及其格式

java - 如何在Java中打印用户输入的字符串中的一个字母?

java - 如何将长字符串压缩到文件中并检索它?

mysql - InvalidOperationException 未处理 - 轻松修复?

sql - 是否可以有一个包含 Excel 文件为 "data source"的 SQL 数据库?

android - 为什么 EditText.getText 在 Android 中显示为 null?

python - 计算pygtk pango中文本字符串的大小以进行文本填充

javascript - javascript对象中字符串键的单引号