Winform树形菜单和文件读写

lijun_net 2010-11-19 09:56:22
有这样一个txt文件, 格式如下
1 001
1 002
1 003
1 004
2 005
2 006

要把这个文件读出来后添加到TreeView中
前面的1,2相当于根节点, 后面的001,002,003,004....这相当于子节点

现在我遇到的问题是,读取这个文件后得到的字符串该如何处理
比如, 要截取每一行末尾的换行符, 1和001中间的空格,
然后根据根节点的不同来绑到树形菜单上

我的想法是

public void SpiltChar()
{
FileStream fs = new FileStream("C:\\Documents and Settings\\Lj\\桌面\\model1.txt", FileMode.Open);
StreamReader st = new StreamReader(fs);
string aaa=st.ReadToEnd();
fs.Close();
st.Close();


}


这样读取后, 先截取掉换行符, 然后再循环处理空格符。

但感觉这样有点麻烦, 有什么好的方法吗?
还有就是那个换行符, 该怎么截取掉呢?

string []array=aaa.Split(new char[5]{'<','b','r','/','>'});

这能成不?好像不行。

...全文
203 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wbxiaozhong 2010-11-20
  • 打赏
  • 举报
回复
学习了
jshi123 2010-11-20
  • 打赏
  • 举报
回复
=>是lambda表达式, .net3.0里才有,vs2005不能用
vs2005的写法如下:

// 这里填上需要显示的根节点的编号
string[] roots = new string[] { "1", "2" };

string[] lines = File.ReadAllLines("C:\\Documents and Settings\\Lj\\桌面\\model1.txt");
string[][] records = Array.ConvertAll<string, string[]>(lines, delegate(string line) { return line.Split(); });
records = Array.FindAll(records, delegate(string[] rec) { return rec.Length>1; });
foreach (string root in roots)
{
string[][] rows = Array.FindAll(records, delegate(string[] rec) { return rec[0] == root; });
TreeNode[] children = Array.ConvertAll<string[], TreeNode>(rows, delegate(string[] rec) { return new TreeNode(rec[1]); });
treeView1.Nodes.Add(new TreeNode(root, children));
}
whrspsoft3723 2010-11-19
  • 打赏
  • 举报
回复
。。。。。。。。。。。
lijun_net 2010-11-19
  • 打赏
  • 举报
回复
哦我知道了, 这是匿名类型吧, 那2005里不就不能用了啊
lijun_net 2010-11-19
  • 打赏
  • 举报
回复
jshi123

1 001
1 002
1 003
1 004
2 005
2 006


能不能再扩展一下, 比如 只显示 根节点1的树形菜单,

弄个变量控制下, 想显示1显示1,想显示2的, 就只显示2的。

你这代码, 我完全看不懂, 你给改下呗!

或者指点一下啊, 这在谷歌上都不知道该怎么搜索这个用法 .select =>
lijun_net 2010-11-19
  • 打赏
  • 举报
回复
To: jshi123

这段代码好神奇!
虽然不懂是什么用法。

不知道在VS2005中可以运行吗

jshi123 2010-11-19
  • 打赏
  • 举报
回复

string[] lines = File.ReadAllLines("C:\\Documents and Settings\\Lj\\桌面\\model1.txt");
var q = lines.Select(line => line.Split()).Where(ss => ss.Length > 1)
.Select(ss => new { node = ss[0], childNode = ss[1] })
.GroupBy(f => f.node).Select(g =>
{
var children = g.Select(f => new TreeNode(f.childNode));
return new TreeNode(g.Key, children.ToArray());
});
treeView1.Nodes.AddRange(q.ToArray());
colorall 2010-11-19
  • 打赏
  • 举报
回复
一行一行读

111,129

社区成员

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

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

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