关于TXT文件里信息的搜索问题,熟悉文件的高手请进

DrinkBeer 2009-12-31 09:26:41
我在写一个小型公司人员信息管理系统,把人员信息写到文件中(不能使用数据库,老师谓之曰:“要从底层做起”。。。),那写就写吧,写着写着,还要把信息读出来啊,那我就得搜索人员信息,根据编号来

下面是TXT中我写进去的信息

//姓名 编号 职位
Eder 1000 经理
Joe 1001 兼职技术员
Jack 1002 兼职推销员
Sara 1003 销售经理
Tudi 1004 销售经理

(1)我是使用数组把信息全部放进去,然后一遍遍匹配,可是我做出来之后,VS没有报错,但是运行就一直在运行状态,不知何故?请高手指点。

(2)有别的办法搜索TXT文本中的信息吗?求教了。好像正则表达式可以,还有别的方法吗?
...全文
140 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
特别 2009-12-31
  • 打赏
  • 举报
回复
1、11楼的方法就是一行一行地读出来的,这个肯定要这样做的
2、我的意思是你没必要知道一共有多少行
如果存在的话,只要读取存在的那行就行了,后面不要读了
如果不存在的话,你可以搞个变量计数,最后的结果就是总行数

[Quote=引用 12 楼 drinkbeer 的回复:]
引用 11 楼 sdfkfkd 的回复:
你要先读出行数干什么呢?


我检索信息里的编号,必须要一行一行读出来,然后把每一行的文本分割开,放入数组,然后再把数组中的内容和我输进去要找的那个ID进行匹配,难道还有别的办法么?
[/Quote]
DrinkBeer 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sdfkfkd 的回复:]
你要先读出行数干什么呢?
[/Quote]

11楼是正解。。。谢谢,祝你节日快乐啊,呵呵~~
summeryangyan 2009-12-31
  • 打赏
  • 举报
回复
学习~~~
DrinkBeer 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sdfkfkd 的回复:]
你要先读出行数干什么呢?
[/Quote]

我检索信息里的编号,必须要一行一行读出来,然后把每一行的文本分割开,放入数组,然后再把数组中的内容和我输进去要找的那个ID进行匹配,难道还有别的办法么?
特别 2009-12-31
  • 打赏
  • 举报
回复
你要先读出行数干什么呢?

string ID = textBox1.Text;
string path = @"../members.txt";

StreamReader sr = new StreamReader( path );
string[] content = new string[0];
bool find = false;

string str = string.Empty;
while ( !sr.EndOfStream )
{
str = sr.ReadLine();
content = str.Split( ' ' );
if ( content[1].Equals( ID ) )
{
find = true;

textBox2.Text = content[0];
textBox3.Text = content[1];
textBox4.Text = content[2];

break;
}
}

sr.Close();

if ( !find )
{
MessageBox.Show( "查无此人" );
}
DrinkBeer 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mngzilin 的回复:]
加上这句sr.Close();
[/Quote]

while (!sr.EndOfStream)
{
row++;
}
此处死循环 了,要怎么修改才能读出TXT文件的行数呢?
DrinkBeer 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sdfkfkd 的回复:]
楼主把断点放在
for (int i = 0; i < row; i++)
试试看看能不能跑到
[/Quote]

果然是那个地方的问题,那我怎么读出TXT文件中的行数?
特别 2009-12-31
  • 打赏
  • 举报
回复
while (!sr.EndOfStream)
{
row++;
}
此处应该死循环
楼主把断点放在
for (int i = 0; i < row; i++)
试试看看能不能跑到
mngzilin 2009-12-31
  • 打赏
  • 举报
回复
加上这句sr.Close();
DrinkBeer 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mngzilin 的回复:]
死循环了
[/Quote]

应该不至于吧,那你看看吧。检索的就是一楼中的那一点内容

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsApplication4
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string ID = textBox1.Text;
string path = @"../members.txt";
StreamReader sr = new StreamReader(path);
string[] content = new string[0];
int row = 0;
while (!sr.EndOfStream)
{
row++;
}
for (int i = 0; i < row; i++)
{
content[i] = sr.ReadLine();
string[] temp = content[i].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int j = 0; j < temp.Length; j++)
{
if (temp[j] == ID)
{
textBox2.Text =temp[0];
textBox3.Text =temp[1];
textBox4.Text =temp[2];
}
else
continue;
}
}
MessageBox.Show("查无此人");
}
}
}
mngzilin 2009-12-31
  • 打赏
  • 举报
回复
string path = @"../members.txt";
StreamReader sr = new StreamReader(path);
//sr.BaseStream.Seek(0, SeekOrigin.Begin);
string[] content = new string[0];
int row = 0;
while (!sr.EndOfStream)
{
row++;
}
for (int i = 0; i < row; i++)
{
content[i] = sr.ReadLine();
string[] temp = content[i].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int j = 0; j < temp.Length; j++)
{
if (temp[j] == ID || temp[j] == name)
{
return temp;
}
else
continue;
}
}
MessageBox.Show("查无此人");
return null;
mngzilin 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 drinkbeer 的回复:]
(1)我是使用数组把信息全部放进去,然后一遍遍匹配,可是我做出来之后,VS没有报错,但是运行就一直在运行状态,不知何故?请高手指点。
[/Quote]

死循环了
DrinkBeer 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mngzilin 的回复:]
代码呢?
[/Quote]

系统没有报错哦,我估计不是代码的问题,可能是我的思想就是错的。或者用数组的方法在这里不适用。。。
mngzilin 2009-12-31
  • 打赏
  • 举报
回复
代码呢?
wuyq11 2009-12-31
  • 打赏
  • 举报
回复

111,120

社区成员

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

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

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