主题:请高手帮帮忙
miaaa
[专家分:0] 发布于 2007-11-03 17:50:00
txt file内有一篇英文文章
我要先把文章读进 然后再做一些分析(如字数,段落)
请问应该怎样read file ,再将文章的文字读读进array ??
thank you!
回复列表 (共8个回复)
沙发
shisutianxia [专家分:630] 发布于 2007-11-03 22:39:00
program dfd(input,output,f)
var a:array[1.1000] of char;
f:text;ch:char;i:integer;
begin
assign(f,'titel.txt');
reset(f);i:=0;
while not eof(f) do
begin
if not eoln(f) then begin read(f,ch);inc(i);a[i]:=ch;end else
readln(f);
end;
end.
板凳
miaaa [专家分:0] 发布于 2007-11-06 19:50:00
再有一个问题请教~~
如果上面的array 存了\"this is a word.\"
应该怎样去数这里有4 个英文字?
和个别英文字母在array内出现的次数?
(例如t出现了一次, i出现了两次..等等)
我还是pascal新手呀~~请帮帮忙吧!!
3 楼
angwuy [专家分:2280] 发布于 2007-11-06 20:01:00
直接枚举
建议你把你的pascal教程看完后再来问问题
4 楼
miaaa [专家分:0] 发布于 2007-11-06 22:00:00
我就是怎么想也不懂 再在这里发问
我是自学的 教程内都没有这些实例...
要是麻烦了你 对不起
5 楼
angwuy [专家分:2280] 发布于 2007-11-07 18:01:00
5.1 For语句
1.递增型FOR循环。
FOR 循环控制变量:=循环初值 TO 循环终值 DO 循环的语句(或语段)
例: FOR I:=5 TO 10 DO WRITELN (I);
输出的结果为: 5 6 7 8 9 10 即循环一共执行了6次
如果要重复多个语句,一定要用BEGIN-END形式:
例:
FOR I:=1 TO 10 DO
BEGIN
WRITELN (I);
WRITELN (10-I);
END;
2.递减型FOR循环
FOR 循环控制变量:=循环初值 DOWNTO 循环终值 DO 循环语句
递减型FOR循环与递增型FOR循环基本相同,只是循环控制变量每次递减。
3.FOR循环的几点注意内容:
(1)循环控制变量必须是顺序类型的变量。所谓顺序类型的变量,就是指整型,字符型,枚举型,子界型,不允许是实型。
(2)不允许在循环体内再对循环控制变量赋值。
例如:
A:=10;B:=50;
FOR K:=A TO B DO
BEGIN
K:=K+1;{这一句是错误的!!!!!!!!}
WRITELN (K);
END;
(3)当循环初值或循环终值中包含变量时,允许在循环体内改变这些变量的值,但并不改变原定的循环次数。
例:
A:=1;B:=10;
FOR I:=A TO B DO
BEGIN
A:=5;B:=4;
END;
在上面例子中,A,B的值在循环的内部发生了变化,但并不影响循环的次数,依然是10次。
4.多重循环 循环体由PASCAL语句构成,当然也可以包含FOR语句,这就构成了循环的嵌套,形成多重循环。
例如,以下FOR循环输出5行,每行输出10个星号(*)
FOR i:=1 to 5 DO
BEGIN
FOR j:=1 TO 10 DO
Write('*');
END;
初学者应当特别注意,内层的循环变量不能和外层的循环变量相同。也就是说,嵌套的各层循环应当使用不同的变量作为循环变量。
5.2 While语句
1.WHILE循环的执行形式 WHILE 布尔表达式 DO 语句
例如:
k:=10;
WHILE k>0 DO
BEGIN
Writeln (k);
k:=k-1
END;
其中
(1)WHIlE 和DO是PASCAL保留关键字,是WHILE循环语句的组成部分。
(2)保留关键字DO后面的“语法”只能是一条语句,称为“循环体”;如果循环 体中需要包含多个语句则应该如上例所示,采用一条复合语句。
2.WHILE循环的执行功能 当执行到WHILE语句时
(1)求出布尔表达式的值
(2)若布尔表达式的值为真,则执行循环体内的语句;若为“假”,执行步骤4
(3)重复步骤1和2
(4)循环结束,执行循环后面的语句。
5.3 Repeat-Until语句
1.REPEAT-UNTIL类型的循环的执行形式
REPEAT
语句1
语句2
……
语句n
UNTIL 布尔表达式
例如:以下循环求n=1+2+3+……+100
n:=0;t:=i;
REPEAT
n:=n+t; t:=t+1;
UNTIL t>100;
其中
(1)REPEAT和UNTIL是PASCAL保留关键字。
(2)在REPEAT和UNTIL之间的语句构成循环。在它们之间可以有任意多个语句,这一点和FOR,WHILE循环不同,FOR,WHILE循环体在语法上只允许一条语句。
2.REPEAT-UNTIL循环的执行功能
(1)遇到REPEAT语句后,即进入循环体,顺序执行循环体内的语句。
(2)遇到UNTIL语句后,求布尔表达式的值。若值为假,则返回步骤1;若为“真”,执行步骤3
(3)循环结束,执行UNTIL后面的下一条语句。
6 楼
angwuy [专家分:2280] 发布于 2007-11-07 18:03:00
关于字符串:
6.3 字符串
1. 字符串用于存放整批的字符数据。通常编程中使用字符串存放字符化了的数字数据。如高精度运算时存放操作数和运算结果。字符串可以看作是特殊的字符串数组来处理。当然,它也有自已的特点。下面是字符串定义的格式:
var
s:string; s1:string[15];
字符串定义时,如不指定长度,则按该类型的最大长度(255个字符)分配空间,使用时最大可用长度为255个;如果在中括号中给出一个具体的值(1—255之间),则按这个值的大小分配空间。使用时,最大的可用长度即为该值。
2.字符串的输入、输出:
字符串类型既可按数组方式输入、输出,也可直接输入、输出:readln(s);writeln(s);多个字符串输入时以回车作为数据间的分隔符;每个readln语句只能读入一个字符串。
3.有关字符串的操作:
操作 类型 作用 返回值 例子
length(s) 函数 求字符串s的长度 整型 s:='123456789';
l:=length(s);{l的值为9}
copy(s,w,k) 函数 复制s中从w开始的k位 字符串 s:='123456789';
s1:=copy(s,3,5);{s1的值是'34567'}
val(s,k,code) 过程 将字符串s转为数值,存在k中;code是错误代码 var s:string;k,code:integer;
begin
s:='1234';
val(s,k,code);
write(k);{k=1234}
str(i,s) 过程 将数值i转为字符串s i:=1234;
str(i,s);
write(s);{s='1234'}
Delete(s,w,k) 过程 在s中删除从第w位开始的k个字符 s := 'Honest Abe Lincoln';
Delete(s,8,4);
Writeln(s); { 'Honest Lincoln' }
Insert(s1, S, w) 过程 将s1插到s中第w位 S := 'Honest Lincoln';
Insert('Abe ', S, 8); { 'Honest Abe Lincoln' }
Pos(c, S) 函数 求字符c在s中的位置 整型 S := ' 123.5';
i :=Pos(' ', S);{i的值为1}
+ 运算符 将两个字符串连接起来 s1:='1234';
s2:='5678';
s:=s1+s2;{'12345678'}
7 楼
angwuy [专家分:2280] 发布于 2007-11-07 18:05:00
1.文本文件的定义:
文本文件不是简单地由某类型的元素序列所组成,它的基本元素是字符,由它们构成行,若干行组成一份原文。由于各行的长度可以不同,所以文本文件只能顺序地处理。文本文件的定义如下:
var
fp:text;
2.文本文件的读操作:
(1)调用assign过程,把磁盘文件赋予文本文件变量;
assign(fp,filename);
(2)调用reset过程,为读操作做准备;
reset(fp);
(3)在需要读数据的位置调用read过程或readln过程。
readln(fp,var1,var2,...,varn);
3.文本文件的写操作:
(1)调用assign过程,把磁盘文件赋予文本文件变量;
assign(fp,filename);
(2)调用rewrite过程,为读操作做准备;
rewrite(fp);
(3)在需要读数据的位置调用write过程或writeln过程。
writeln(fp,var1,var2,...,varn);
4.文本文件的关闭操作:
close(fp);
5.文本文件的其他操作:
(1)EOF(fp)—布尔函数,用于判断文件结束否。
(2)EOLN(fp)—布尔函数,用于判断行结束否。
8 楼
angwuy [专家分:2280] 发布于 2007-11-07 18:05:00
需要的资料已经在这里了
我来回复