C#对文件的修改、排序问题。高分相送,顶着有分!急

baofen14787 2008-11-17 11:21:19
有个项目要对txt文件的内容进行重新排版,调整。

比如一个txt文件有如下内容:

发表时间:2009-09-09 发表人hugo 文章内容:。。。。。。
文章标题:我要排序




这个文件的内容是乱的。
现在要通过程序,就是要编写程序,先读取这个txt文件,然后自动排版好。
排版后的结果是:
文章标题:。。
发表人:。。
发表时间:。。
文章内容:。。。


就是提取文件的内容然后重新按需要去排版,有什么思路或方法?
HELLP
...全文
299 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
lrzhou 2009-04-28
  • 打赏
  • 举报
回复
学习
洋溢2016 2009-01-09
  • 打赏
  • 举报
回复
o
NYNYC 2009-01-03
  • 打赏
  • 举报
回复
xia先弄出来在排比教好把
floadcloud 2008-11-19
  • 打赏
  • 举报
回复
up
baofen14787 2008-11-19
  • 打赏
  • 举报
回复
UP!
wsp6188 2008-11-19
  • 打赏
  • 举报
回复
不好分析!帮顶
baofen14787 2008-11-19
  • 打赏
  • 举报
回复
主要是不知道如何匹配:
string result =
System.Text.RegularExpressions.Regex.Replace(content, "(?s)(发表时间.*?)(?=发表人|文章内容|文章标题|发表时间)",“这里写什么?”);
baofen14787 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 min_jie 的回复:]
在顺序不固定之下,还要确定一下这4个部分是不是必要元素,还是有些是可有可无的?比如,会不会出现有些文章没有发表时间之类的?
如果是4个部分都肯定存在的,那么要用正则来匹配的话,可以分4次来匹配,正则可以这样写:

C# code(?s)(发表时间.*?)(?=发表人|文章内容|文章标题|发表时间)



其他3个正则式子类似。。只要把发表时间换成其他的就可以了。。匹配完之后,按你自己的顺序输出来就可以了。
[/Quote]

还是不是很明白如何匹配。
假设我有一个string content="发表人hugo 文章内容:这个文件的内容是乱的。
现在要通过程序,就是要编写程序,先读取这个txt文件,然后自动排版好。发表时间:2009-09-09
文章标题:我要排序"

匹配结果为string result =“”;

如何用content 匹配成想要的result? 顺序可以假设是一楼的顺序
wangbin1986 2008-11-19
  • 打赏
  • 举报
回复
大开眼界!
hdzdw 2008-11-19
  • 打赏
  • 举报
回复
那就顶一下吧
baofen14787 2008-11-19
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 baofen14787 的回复:]
文章内容这几个字是没有的
就是说内容里面要去掉这几个字!
[/Quote]

就是说如何在匹配的内容中去掉指定的字符!!!
good-code 2008-11-19
  • 打赏
  • 举报
回复
顶@
yagebu1983 2008-11-19
  • 打赏
  • 举报
回复
有点难度!!
关注!!
haifeng39 2008-11-19
  • 打赏
  • 举报
回复
up
baofen14787 2008-11-19
  • 打赏
  • 举报
回复
文章内容这几个字是没有的
就是说内容里面要去掉这几个字!
moluotuo 2008-11-19
  • 打赏
  • 举报
回复
你要是不考虑【。。。。。。】这些字符的话,可以这样:
FileStream fstream=File.OpenRead("*.txt的url");
long filesize=fstream.Length;
byte[] arr=new byte[filesize];
UTF8Encoding data=new UTF8Encoding(true);

fstream.Read(arr.0,arr.Length);

string content=data.GetString(arr);
string delim=":";
char[] delimiter=delim.ToCharArray();
string[] apilt=null;
for(int i=1;i<content.Length;i++)
{
spilt=text.Spilt(delimiter,i);
}
将字符串根据【:】分割 成多个,再把结果放进Spilt数组里
再把它逐个写进 *.txt 中,若要加【。。。】可以想办法用循环给每个成员+【。。。】

不知道对你有没有帮助?+"..."
baofen14787 2008-11-19
  • 打赏
  • 举报
回复
如果内容不是必须的怎么处理?
pvgyetg 2008-11-19
  • 打赏
  • 举报
回复
友情UP
Navymk 2008-11-18
  • 打赏
  • 举报
回复
3楼好强 赞一个
我考虑的方法是建立一个有序列表,对应你约定的顺序。而这个列表通过键值获取文本的内容后,按顺序输出一次。
获取文本的方法自然还是正则了。

不过3楼这个好得多。
止戈而立 2008-11-18
  • 打赏
  • 举报
回复
假设那几个的顺序是固定的,那么就可以用一句代码搞定:

string result=System.Text.RegularExpressions.Regex.Replace("你的文本内容","(?s)(发表时间.*?)(发表人.*?)(文章内容.*?)(文章标题.*?)(?=发表时间|$)",@"$4\r\n$3\r\n$1\r\n$2\r\n");
加载更多回复(25)

110,536

社区成员

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

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

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