索引和长度必须指向字符串中的位置

时间:2011-11-29 11:18:15

标签: asp.net

我正在尝试将字符串剪切成6个字段,每个字段的最大长度为30。字符串的总长度是173.我已经创建了如下代码;

(
(("" + dr["MESSAGE"]).ToString().Trim().Length<30 && 
("" + dr["MESSAGE"]) != "")?(("" + dr["MESSAGE"]) + "|||||") : 
(("" + dr["MESSAGE"]).ToString().Trim().Length>150 && 
("" + dr["MESSAGE"]).ToString().Trim().Length<181)?
(("" + dr["MESSAGE"]).Trim().PadRight(180,' ').Substring(0,30).Trim() + "|" + 
("" + dr["MESSAGE"]).Trim().PadRight(180,' ').Substring(31,60).Trim() + "|" + 
("" + dr["MESSAGE"]).Trim().PadRight(180,' ').Substring(61,90).Trim() + "|" + 
("" + dr["MESSAGE"]).Trim().PadRight(180,' ').Substring(91,120).Trim() + "|"  + 
("" + dr["MESSAGE"]).Trim().PadRight(180,' ').Substring(121,150).Trim() + "|" + 
("" + dr["MESSAGE"]).Trim().PadRight(180,' ').Substring(151,180).Trim()) : "" + "|||||")

代码本身生成输出文件但没有数据。我得到的只是页眉和页脚,错误“索引和长度必须引用输出文件底部指示的字符串中的位置”。

感谢您帮助解决我的问题。

2 个答案:

答案 0 :(得分:2)

你自己说,

  

字符串的总长度为173。

然而,这里

().PadRight(180,' ').Substring(151,180).Trim()) 

你正在尝试创建一个子字符串来访问char 180的数据....这比你的长度为173的字符串长。

答案 1 :(得分:2)

我认为你错误地认为子串是如何工作的。

第二个参数是要提取的字符串的长度,而不是您想要完成的索引 - MSDN Ref

  

参数

     

startIndex类型:System.Int32   基于零的起始字符   在这种情况下子串的位置   length类型:System.Int32   子字符串中的字符数。

您希望为第二个参数指定30,因为您希望将其拆分为30个字符块。

我认为这应该有用(但代码确实需要整理!):

((dr["MESSAGE"].ToString().Trim().Length < 30 && test != "")
    ? (dr["MESSAGE"].ToString() + "|||||")
    : (dr["MESSAGE"].ToString().Trim().Length > 150 && test.Trim().Length < 181)
        ? dr["MESSAGE"].ToString().Trim().PadRight(180, ' ').Substring(0, 30).Trim() + "|" +
            dr["MESSAGE"].ToString().Trim().PadRight(180, ' ').Substring(30, 30).Trim() + "|" +
            dr["MESSAGE"].ToString().Trim().PadRight(180, ' ').Substring(60, 30).Trim() + "|" +
            dr["MESSAGE"].ToString().Trim().PadRight(180, ' ').Substring(90, 30).Trim() + "|" +
            dr["MESSAGE"].ToString().Trim().PadRight(180, ' ').Substring(120, 30).Trim() + "|" +
            dr["MESSAGE"].ToString().Trim().PadRight(180, ' ').Substring(150, 30).Trim()
        : "|||||");

这个问题 - Splitting a string / number every Nth Character / Number?可能会为您提供更好的代码