关于字符串切割开处理的问题

zephyr0826 2010-03-04 05:42:23
string str = srd.ReadLine();
string[] Array1 = Regex.Split(str, ":以价格 ");
string str2 = Array1[1];



str读出来是="2010/1/27 8:30:00:以价格 1.404500 执行 SK"
如上Array1[0]读出来是 "2010/1/27 8:30:00"
但是执行到string str2 = Array1[1];的时候总是说超出索引范围的异常
在调试中看到str2是="1.404500 执行 SK"
也就是说已经赋值了的 就是超出范围异常

求教了 解决+分···
...全文
149 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zephyr0826 2010-03-05
  • 打赏
  • 举报
回复
我发现问题了 直接写字符串是可以处理 也可以读的 但是从文件读取以后就不行了

StreamReader srd;
srd = File.OpenText("1.txt");
while (srd.Peek() != -1)
{
string str =srd.ReadLine();
str.Trim();
string str3 = "以价格执行";
char[] ch = str3.ToCharArray();
string[] Array1 = str.Split(ch,StringSplitOptions.RemoveEmptyEntries);
//foreach(string i in Array1)
listBox1.Items.Add(Array1[2]);


运行到最后一句就抛出超出范围异常

如果我这样

string str ="2010/1/27 8:30:00:以价格 1.404500 执行 SK";


处理下来就是OK的 费解了 大家帮忙

TXT里面的文字是这样的

2010/1/27 8:30:00:以价格 1.404500 执行 SK
2010/1/27 9:00:00:以价格 1.404900 执行 BP
2010/1/27 20:00:00:以价格 1.397800 执行 SK
2010/1/27 20:10:00:以价格 1.396500 执行 BP
2010/1/27 20:20:00:以价格 1.397200 执行 SK
2010/1/27 21:00:00:以价格 1.399900 执行 BP
2010/1/28 5:30:00:以价格 1.399700 执行 SK
2010/1/28 5:40:00:以价格 1.399600 执行 BP
2010/1/28 5:50:00:以价格 1.399600 执行 SK
2010/1/28 6:00:00:以价格 1.399500 执行 BP
2010/2/3 8:20:00:以价格 1.395000 执行 SK
meixinzz 2010-03-05
  • 打赏
  • 举报
回复
http://www.zzyuli.com/
xingyuebuyu 2010-03-05
  • 打赏
  • 举报
回复
从文件读取的内容可能包括不可显示的字符
string str =srd.ReadLine();

string str1 ="2010/1/27 8:30:00:以价格 1.404500 执行 SK";
你比较一下从文件将"2010/1/27 8:30:00:以价格 1.404500 执行 SK"这行的内容读到str后,比较str和str1的长度是否相等,如果不等,那你将文件全部读到byte(),对照ASCII表,看有什么不可显示的字符在里面,你将这些不可显示的字符过滤掉后,再想上面那样处理就可以了。
bourbon1795 2010-03-04
  • 打赏
  • 举报
回复
split方法用错了
好像
CooperWu 2010-03-04
  • 打赏
  • 举报
回复
string str = srd.ReadLine();
string[] Array1 = Regex.Split(str, ":以价格 ");
string str2 = Array1[1];

这部分代码没有问题。

str读出来是="2010/1/27 8:30:00:以价格 1.404500 执行 SK"
如上Array1[0]读出来是 "2010/1/27 8:30:00"
但是执行到string str2 = Array1[1];的时候总是说超出索引范围的异常
在调试中看到str2是="1.404500 执行 SK"
也就是说已经赋值了的 就是超出范围异常

那么一定是输入的str有问题了!请仔细检查每次的输入。
或者把“:以价格”写成“***”测试一下。因为中文,尤其是标点很容易错误。
xingyuebuyu 2010-03-04
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-tw/06tc147t(zh-cn).aspx
switch case。注意还可以直接使用字符串变量
我姓区不姓区 2010-03-04
  • 打赏
  • 举报
回复

string str = "2010/1/27 8:30:00:以价格 1.404500 执行 SK";
string[] result = str.Split(new string[] { "以价格", "执行" }, StringSplitOptions.RemoveEmptyEntries);
DateTime dt = DateTime.Parse(result[0].TrimEnd(':'));
double d = double.Parse(result[1]);
string s = result[2];
Console.WriteLine(dt);
Console.WriteLine(d);
Console.WriteLine(s);

zephyr0826 2010-03-04
  • 打赏
  • 举报
回复
现在没机器试代码 明天试试楼上的方法 OK了分就给你了
BTW
swich([string])是可以的吧 就是条件是STRING
xingyuebuyu 2010-03-04
  • 打赏
  • 举报
回复
string str1 = "2010/1/27 8:30:00:以价格 1.404500 执行 SK";
string str3=":以价格 ";
char[] ch=str3.ToCharArray();
string[] Array1 =str1.Split(ch,StringSplitOptions.RemoveEmptyEntries);

string str2 = Array1[1];

执行结果如下:
Array1[0]="2010/1/27"
Array1[1]="8:30:00"
Array1[2]="1.404500"
Array1[3]="执行"
Array1[4]="SK"
zephyr0826 2010-03-04
  • 打赏
  • 举报
回复
编译是通过了的 就是运行的时候 运行到string str2 = Array1[1];
就抛出超出索引范围的异常
Array[0]就是OK了的

或者大家帮忙想下“2010/1/27 8:30:00:以价格 1.404500 执行 SK“
我需要取出 2010/1/27 8:30:00 datetime
1.404500 double
SK string

这几个字段

注意 时间有时候会2010/12/5 2010/1/1 这样 也就是长度不一样·····

大家帮帮忙了 小弟不胜感激

_Will_ 2010-03-04
  • 打赏
  • 举报
回复
string str1 = "2010/1/27 8:30:00:以价格 1.404500 执行 SK";
string[] Array1 = Regex.Split(str1, ":以价格 ");
string str2 = Array1[1];
这段代码运行下没错的吧!!
nali29 2010-03-04
  • 打赏
  • 举报
回复
源码贴出来看看

回复内容太短了
xingyuebuyu 2010-03-04
  • 打赏
  • 举报
回复
我这调试通过了,这问题奇怪啊
我姓区不姓区 2010-03-04
  • 打赏
  • 举报
回复
贴你的代码看看
PandaIT 2010-03-04
  • 打赏
  • 举报
回复
Regex
cpp2017 2010-03-04
  • 打赏
  • 举报
回复
你加个日志,

if(Array1.Length<2)
{
//日志

}
qlzf11140820 2010-03-04
  • 打赏
  • 举报
回复
怪事天天有 今天特别多
koukoujiayi 2010-03-04
  • 打赏
  • 举报
回复
引用 2 楼 zephyr0826 的回复:
调试的时候看到的值是理想的值 也就是对的值 但是他说超出范围 明明就已经取到了

看看出错的索引号是多少??
koukoujiayi 2010-03-04
  • 打赏
  • 举报
回复
看不出有什么问题!!
zephyr0826 2010-03-04
  • 打赏
  • 举报
回复
调试的时候看到的值是理想的值 也就是对的值 但是他说超出范围 明明就已经取到了
加载更多回复(1)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧