1 Востаннє редагувалося mrixua (30.03.2014 01:27:45)

Тема: читання текстового файлу, підрахунок літер

потрібно прочитати з файлу 7 рядків тексту. файл у котрому 2 букви S вивести на екран.
не можу знайти помилку. компіляція проходить. запускається і нічого не пише. шлях файлу встановлений правильно. у файлі є рядки з двома S

var f:text;
    a: array [1..7] of string[70];
    b: array [1..7] of integer;
    i,j:integer;
    
begin
  assign (f,'D:\f.txt');
  reset(f);
 
 i:=1; 

 while not eof(f) do
  begin
  while not eoln (f) do read (f,a[i]);
  i:=i+1;
  end;
 for i:= 1 to 7 do writeln (a[i]); 

 for i:=1 to 7 do 
  for j:=1 to 70 do
 if copy( a[i],j,1)='s' then b[i]:=b[i]+1;
 
 for i:=1 to 7 do
 if b[i]=2 then
   writeln (a[i]); 
 
 
 close(f);
 end.
 

2

Re: читання текстового файлу, підрахунок літер

mrixua написав:
a: array [1..7] of string[70];

А якщо в якомусь з рядків більш ніж 70 знаків?

mrixua написав:
 while not eof(f) do

"поки не закінчився файл". А що станеться, коли в файлі більше 7 рядків? Наприклад, пустий 8-й? А якщо менше? Якось підраховуйте рядки.

mrixua написав:
while not eoln (f) do read (f,a[i]);

"поки не закінчився рядок, прочитати з файлу рядок". Це просто вішає програму - бо read не читає знак закінчення рядка, на відміну від readln. Тут цикл не потрібен, тільки readln.

mrixua написав:
for j:=1 to 70 do

А якщо в якомусь з рядків менш ніж 70 знаків? Крутіть цикл до довжини відповідного рядка.

mrixua написав:
copy( a[i],j,1)='s'

Ви хотіли сказати

a[i][j]='s'
Подякували: Torbins, mrixua2

3 Востаннє редагувалося mrixua (30.03.2014 19:52:14)

Re: читання текстового файлу, підрахунок літер

дякую. помилка була на readln.
немає рядка довшого за 70 символів у мене =)
ні я хотів сказати копі =)
дуже дякую. але не працює- тільки останній рядок  рахує і виводить

4

Re: читання текстового файлу, підрахунок літер

По-перше, наведіть виправлений код. По-друге, надайте вміст файлу. БО МИ НЕ ТЕЛЕПАТИ!

5 Востаннє редагувалося mrixua (30.03.2014 21:31:08)

Re: читання текстового файлу, підрахунок літер

код той самий тільки readln.

var f:text;
    a: array [1..7] of string[70];
    b: array [1..7] of integer;
    i,j:integer;
    
begin
  assign (f,'D:\f.txt');
  reset(f);
 
 i:=1; 
 
 while not eof(f) do
  begin
  while not eoln (f) do readln (f,a[i]);
  i:=i+1;
  end;
 for i:= 1 to 7 do writeln (a[i]); 

 for i:=1 to 7 do 
  for j:=1 to 70 do
 if  copy( a[i],j,1)='s' then b[i]:=b[i]+1;
 
 for i:=1 to 7 do
 if b[i]=2 then
   writeln (a[i]); 
 
 
 close(f);
 end.
 

fail 'f' :
sdf sdf df d
adsf df  fsd g
afasfgdfg dsg as 
fas
fasg
dadf
adsas

І ТРОШКИ ПОЛЕГШЕ! НЕ МАЮ ФОРУМНОГО ДОСВІДУ!!!!!!!!!!!!!!!!!!!!!

6

Re: читання текстового файлу, підрахунок літер

koala написав:
mrixua написав:
while not eoln (f) do read (f,a[i]);

"поки не закінчився рядок, прочитати з файлу рядок". Це просто вішає програму - бо read не читає знак закінчення рядка, на відміну від readln. Тут цикл не потрібен, тільки readln.

koala написав:

"поки не закінчився рядок, прочитати з файлу рядок". Це просто вішає програму - бо read не читає знак закінчення рядка, на відміну від readln. Тут цикл не потрібен, тільки readln.

koala написав:

Тут цикл не потрібен, тільки readln.

koala написав:

Тут цикл не потрібен

Достатньо збільшив?

7

Re: читання текстового файлу, підрахунок літер

koala, mrixua
Прошу не капсити. Якщо не маєте витримки, краще взагалі нічого не пишіть.

Подякували: koala1