想读写一个文本文件,请进来看看。(200分)

  • 主题发起人 主题发起人 forgot2000
  • 开始时间 开始时间
F

forgot2000

Unregistered / Unconfirmed
GUEST, unregistred user!
想做一个文本文件规范调整程序,具体说明如下:
读写一个文本文件,要求:指定的字符匹配对齐。象这样,如C:/File.txt,内容如下:
djfkjsa
begin
begindafjdsjf
begin
fddsfjkdsjf;sd
end
end
begin
enddafsjasdk
end
做一个通用过程,比如formatfile('C:/File.txt','begin','end');执行之后文件变成这样:
djfkjsa
begin
begindafjdsjf
begin
fddsfjkdsjf;sd
end
end
begin
enddafsjasdk
end
看懂了吗?我要产生一个规范化后的文本文件,begin和end匹配,即如果发现是第一个begin,
则首行缩进两个字符,如果又有第二个begin,则缩进四个字符,.....每个end代表匹配了一个
begin,如果begin被匹配了,又从开始时记数缩进量,说通俗一点,就好象Delphi规范化后的
源码那样,每个begin与其相应的end缩进量相同,互相匹配。
请高手们踊跃发言,只谈想法可以,给出代码也可以,谢谢大家。

 
建议用二叉树
 
用最普通的方法,用一个变量用标志,可以看是不是读出一个BEGIN如果读出就标志加1,它
前面就空(标志*2)个空格,如果读出一个END就标志减1,这样我想就行了。
 
你到这里下载
http://homepages.borland.com/torry/tools/code/syntax/jedicodeformat.zip
这是一个pas文件的格式化软件,附带100%的源程序。
 
对不起,现在实在没时间看什么源码,我只想做出一个函数能实现我所说的功能即可。
 
我觉得turbo163说得对,
缩进的多少只取决于语句所在的层数,
碰到一次begin层数加一,碰到一次end层数减一
 
我这里有一个很好的控件,可以对pas文件进行format还比较智能,若需要可提供你的email
 
最简单的方法就是turbo163说的。
 
var i,n : Integer;
begin
n := 0;
for i := 0 to 文件行数 - 1 do
begin
读入一行;
if 本行是'begin' then
begin
n := n + 2;
本行缩进n个字符;
end
else if 本行是'end' then
begin
n := n - 2;
本行缩进n个字符;
end
else
本行所进n+2个字符;
end;
end;
 
还有case呢,它也匹配一下END啊
 
多人接受答案了。
 
后退
顶部