C# 如何读入一个txt文档并修改,然后生成另一个修改后的文档。

比如现在D盘有个文档,名称为file.txt,内容如下:<DOC><DOCNO>13104819680061054</DOCNO><USER>1145923939</US... 比如现在D盘有个文档,名称为file.txt,内容如下:

<DOC>
<DOCNO>13104819680061054</DOCNO>
<USER>1145923939</USER>
<TEXT>[good] 再买2个后卫巴!@AL-C @阿森纳小恶魔 @Charming小法求公正 @St_JoA</TEXT>
</DOC>

<DOC>
<DOCNO>13104888590061054</DOCNO>
<USER>1806670653</USER>
<TEXT>当然是阿森纳啦!有前途又有后路啊!![馋嘴]</TEXT>

现在读入这个文档,然后只截取<TEXT>之间的句子,并去掉@符号和@之后的用户名,成为如下形式:

[good] 再买2个后卫巴!
当然是阿森纳啦!有前途又有后路啊!![馋嘴]

然后同一文件夹下生成一个file1.txt文档 跪求代码。分不是问题。
展开
 我来答
鲁海123
推荐于2016-10-09 · TA获得超过283个赞
知道小有建树答主
回答量:306
采纳率:100%
帮助的人:325万
展开全部
两个步骤
读取文件中的内容
FileStream fs = File.OpenRead(“路径”);
byte[] b = new byte[1024];
while (fs.Read(b, 0, b.Length) > 0)
{
TextBox2.Text += Encoding.Default.GetString(b);
}
然后用正则匹配获取到的内容
Regex myreg = new Regex("<TEXT>(.*?)</TEXT>")
MatchCollection m = myreg.Matches("获取到的文本");
string x="";
for (int i = 0; i < m.Count; i++)
{
x=x+m[i].Value.tostring()Replace("<TEXT>","").Replace("</TEXT>","");//去掉<text>
}
如果@用户名 是隔开的话(就是用空格隔开的话) 你可以用

string mstr = "";
string[] strlist=mstr.Split(' ');//使用空格分成数组
if(strlist[1].IndexOf("@")>=0)
{
mstr= mstr.Replace(strlist[1].ToString(),"");
}

然后是创建文件 并写入数据
string path = Server.MapPath("路径") ;
FileInfo fi = new FileInfo(path);
if (!fi.Exists)//如果文件不存在
{
fi.Create();//创建文件

}
写入文件
FileStream fs = File.OpenWrite(“路径”);//打开文件
fs.Seek(0, SeekOrigin.End);//指向文件头
byte[] b = Encoding.Default.GetBytes(“写入的内容”);//将录入的内容转换为byte数组
fs.Write(b, 0, b.Length);//写入内容
fs.Close();//关闭文件
以上是思路
正则的命名空间using System.Text.RegularExpressions;
追问
谢谢,可是。。能给我一个调试好的代码么,我自己完善不了。。拜托了
追答
protected void Button4_Click(object sender, EventArgs e)
{
FileStream fs = File.OpenRead(Server.MapPath("File/cs.txt"));
byte[] b = new byte[1024];
StringBuilder s = new StringBuilder();
while (fs.Read(b, 0, b.Length) > 0)
{
// TextBox2.Text += Encoding.Default.GetString(b);
s.Append(Encoding.Default.GetString(b));
}
///上面的读取记事本内文本内容
///
Regex myreg = new Regex("(.*?)");
MatchCollection m = myreg.Matches(s.ToString());
StringBuilder x = new StringBuilder();
for (int i = 0; i ", "").Replace("", " \r\n");
}
Regex myreg2 = new Regex("@(.*?) ");
MatchCollection m2 = myreg2.Matches(x.ToString());
//string[] mylist = x.ToString().Split(' ');
for (int i = 0; i alert('操作成功');");
}

以上 cs.txt 是要读取的文本
cs2.txt是生成的文本
经测试可用

不过这种东西还是像楼上那样说的 先转换成xml 比较好弄
ul0402206
2012-08-31 · TA获得超过505个赞
知道小有建树答主
回答量:301
采纳率:0%
帮助的人:304万
展开全部
FileStream f = new FileStream(@"d:\file.txt", FileMode.Open);
FileStream f1 = new FileStream(@"d:\file1.txt", FileMode.CreateNew);
StramReader r = new StramReader(f);
StreamWriter w = new StreamWriter (f1)
while(string s = r.ReadLine() != Null)
{
Regex re = @"\<TEXT\>*\</TEXT\>";
Var m = re.Match(s);
if(m.Success)
{
//如果要去掉<>中的内容自己处理下,我这里没有编译环境写起来比较麻烦
//只能给你一个大概的框架
f1.WriteLine(s);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
iaskall
2012-08-31 · TA获得超过630个赞
知道小有建树答主
回答量:568
采纳率:83%
帮助的人:239万
展开全部
我觉得你这个比较绕弯子了,你的文档很显然是一个xml文档,只不过没有格式标准声明已经文件结尾名存为了txt,实质就是一个xml,建议直接用xml的方法操作更高效直接,否则的话你就要用文本的正则表达来匹配和解析,麻烦不是一点点。
追问
我也不想这么做,可是人家就是这么要求的我也每办法。。
追答
其实也不要紧,如果仅仅是要求输出后是txt你完全可以用流的方式读入到xml对象,然后对这个对象进行操作,操作完了以后再存为txt,这样不就完美的解决了吗?你说呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式