最简单的shell 命令: cat tmp.txt |tr -s ' ' > tmp2.txt
我们先看看 python 的写法:
space1.py
# -*- coding: cp936 -*-
import os, sys
import re
if len(sys.argv) ==2:
f1 = sys.argv[1]
else:
print 'usage: space1.py file1.txt '
sys.exit(1)
if not os.path.exists(f1):
print 'ERROR: %s not found\n' % f1
sys.exit(1)
fp = open(f1,'rt')
f2 = f1 +'.bak'
fp2 = open(f2,'w')
aline =''
for line in fp:
aline = re.sub(r'[ ]{2,}',' ',line)
fp2.write(aline)
#
fp.close()
fp2.close()
我们看看free pascal 写法:
space1.pas
Program space1;
{$mode objfpc}{$H+}
uses sysutils;
Var
f1,f2:text;
str,str2:string;
ln:integer;
Begin
if ParamCount =1 then
begin
AssignFile(f1,ParamStr(1));
AssignFile(f2,ParamStr(1)+'.bak');
end
else begin
if ParamCount =2 then
begin
Assign(f1,ParamStr(1));
Assign(f2,ParamStr(2));
end
else begin
writeln(' usage: readfile file1.txt ');
writeln(' usage: readfile file1.txt file2.bak ');
exit;
end;
end;
ln:=0;
Reset(f1);
Rewrite(f2);
while not eof(f1) do
begin
ln:=ln+1;
readln(f1,str);
if length(str)>0 then
begin
while Pos(' ',str)>0 do
begin
str := StringReplace(str,' ',' ',[rfReplaceAll]);
end;
str2 := str;
writeln(f2,str2);
end;
end;
CloseFile(f2);
CloseFile(f1);
writeln('line number: ',ln);
End.
编译 fpc space1.pas
运行 space1.exe tmp.txt