【问题标题】:'System.ArgumentOutOfRangeException' occurred in mscorlib.dll在 mscorlib.dll 中发生“System.ArgumentOutOfRangeException”
【发布时间】:2013-09-06 23:36:21
【问题描述】:

提前感谢您!我正在编写一个应用程序来读取 txt 文件并写入 Excel。从小处着手,我只是想阅读第一行。

Console.WriteLine 正确输出字符串(字符之间有空格),但是当我尝试从字符串中提取字符时出现此错误:附加信息:索引和长度必须引用字符串中的位置.

while ((input = stream.ReadLine()) != null)
{
  //ACH HEADER LINE
  if (iCurRecLine == 0 && input.IndexOf(HeaderBeginKeyWord) >= 0)     
  {
    Console.WriteLine(input);

    RepDate = input.Substring(23, 6).Trim();
    RecordTypeCode = input.Substring(0, 1).Trim();
    PriorityCode = input.Substring(1, 2).Trim();
    ImmDestination = input.Substring(3, 10).Trim();
    ImmOrigin = input.Substring(13, 10).Trim();
    FileCreatedDate = input.Substring(23, 6).Trim();
    FileCreatedTime = input.Substring(29, 4).Trim();
    FileIDModifier = input.Substring(33, 1).Trim();
    RecordSize = input.Substring(34, 3).Trim();
    BlockingFactor = input.Substring(37, 2).Trim();
    FormatCode = input.Substring(39, 1).Trim();
    Destination = input.Substring(40, 23).Trim();
    Origin = input.Substring(63, 23).Trim();
    ReferenceCode = input.Substring(86, 8).Trim();
    ...
  }
}

我哪里做错了?

【问题讨论】:

  • 这里打印了什么:Console.WriteLine(input);,或者更好的是输入字段如何?
  • 谢谢。输入行是这样的,总共有94个字符,最后8位可以是空白或0(x实际上是空白):101x071000301x6759601771308202341F094101ACHxxxxxxxxxxxxxxxxxxxxFISxACHxMILWAUKEE‌​xxxxxxxx打印时,正确显示x为空​​白。不过不确定最后 8 个空格。
  • 我知道子字符串从零开始。我仔细查看了索引和长度,我觉得它们看起来不错。根据您的建议,我还尝试更改最后一个字段的索引和长度,但仍然出现相同的错误...
  • @Hing-LunMa:如果你这样做Console.WriteLine(input.Length),输出是什么?另外,你知道在哪一行抛出异常吗?
  • @Jim 好电话。打印长度让我更仔细地查看输入文件,发现他们将最后 14 个字符提交为空而不是空白。谢谢大家的帮助!

标签: c# .net argumentexception mscorlib


【解决方案1】:

您正在阅读的文件内容似乎没有经过验证。

.SubString() 抛出 ArgumentOutOfRangeException 如果 startIndex plus length indicates a position not within this instance.

因此:

 RepDate = input.Substring(23, 6).Trim();

如果input 仅包含 10 个字符,则很容易失败并抛出此异常。

【讨论】:

  • 谢谢达伦。输入行是这样的,一共94个字符,最后8个可以是空格也可以是0(x其实是空格):101x071000301x6759601771308202341F094101ACHxxxxxxxxxxxxxxxxxxxxxFISxACHxMILWAUKEExxxxxxxx
  • +1:事实证明这是正确的答案:这条线没有他想象的那么长。他只需要一点额外的刺激来检查它。
猜你喜欢
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多