我正在尝试将字符串剪切成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()) : "" + "|||||")
代码本身生成输出文件但没有数据。我得到的只是页眉和页脚,错误“索引和长度必须引用输出文件底部指示的字符串中的位置”。
感谢您帮助解决我的问题。
答案 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?可能会为您提供更好的代码