Другие языки программирования и технологии
паскаль... как открыть произвольный файл и посчитать сколько там данных слов?
Program txt;uses crt;varf: text;ime,clovo,s1: string;procedure o4istka;beginClrScr;end;beginrepeato4istka;writeln ('vvedite ime faila');readln (ime);assign(f,ime);append (f);writeln ('clovo');readln(clovo);s1:=''; вроде не ругается правильно что ли?while not eof(f) and (pos(clovo,s1)=0 вот эта строчка не понятно обьясните пожалуйста что тут происходит... и что должно быть дальше..
Доброго времени суток.
Сначала процитируе ваше.
Program txt;
uses crt;
var
f: text;ime,clovo,s1: string;
procedure o4istka; {она надо эта процедура, если в программе можно просто написвть ClrScr;?
begin
ClrScr;
end;
begin
repeat
o4istka;
writeln ('vvedite ime faila');
readln (ime);
assign(f,ime);
append (f); {вам надо ЧИТАТЬ из файла, так зачем открывать его на ДОБАВЛЕНИЕ? }
writeln ('clovo');
readln(clovo);
s1:=''; вроде не ругается правильно что ли?
while not eof(f) and (pos(clovo,s1)=0 вот эта строчка не понятно обьясните пожалуйста что тут происходит.. . и что должно быть дальше. .
Эта строчка предлагает выполнять программу пока не достигнут конец файла и пока clovo отсутствует в s1. Как только оно там появится, логическое выражение pos(clovo,s1)=0 станет ложью и цикл завершится.
Надо так.
begin
ClrScr;
Write ('vvedite ime faila : '); {использование Write без Ln оставит курср в этой же строке}
ReadLn (ime);
Assign(f, ime);
Reset (f);
Write ('clovo : ');
ReadLn(clovo);
N := 0; {счетчик количества слов}
While not Eof(f) do begin
ReadLn(f,s1); {считываем строку из файла}
while Pos(clovo,s1) > 0 do begin {слово есть в строке}
N := N + 1; {увеличиваем счетчик}
Delete(s1, Pos(clovo,s1), Length(clovo)); {и удаляем его из строки}
end;
end;
WriteLn('В файле ', N, ' слов');
ReadLn;
end.
Вот и все. Зациклить программу и вывод результатов в файл предлагаю сделать самостоятельно. Если нужно, то часть программы, подсчитывающая число вхождений слова в файл можно оформить в виде функции. Например, так
function CountWords(S: String; var F: Text): Integer;
var S1 : String;
begin
N := 0; {счетчик количества слов}
While not Eof(f) do begin
ReadLn(f,s1); {считываем строку из файла}
while Pos(S, S1) > 0 do begin {слово есть в строке}
N := N + 1; {увеличиваем счетчик}
Delete(S1, Pos(S, S1), Length(S)); {и удаляем его из строки}
end;
end;
CountWords := N;
end;
А обращаться к ней так
WriteLn('В файле ', CountWords(clovo, F), ' слов');
Остальное сами.
Удачи!
Сначала процитируе ваше.
Program txt;
uses crt;
var
f: text;ime,clovo,s1: string;
procedure o4istka; {она надо эта процедура, если в программе можно просто написвть ClrScr;?
begin
ClrScr;
end;
begin
repeat
o4istka;
writeln ('vvedite ime faila');
readln (ime);
assign(f,ime);
append (f); {вам надо ЧИТАТЬ из файла, так зачем открывать его на ДОБАВЛЕНИЕ? }
writeln ('clovo');
readln(clovo);
s1:=''; вроде не ругается правильно что ли?
while not eof(f) and (pos(clovo,s1)=0 вот эта строчка не понятно обьясните пожалуйста что тут происходит.. . и что должно быть дальше. .
Эта строчка предлагает выполнять программу пока не достигнут конец файла и пока clovo отсутствует в s1. Как только оно там появится, логическое выражение pos(clovo,s1)=0 станет ложью и цикл завершится.
Надо так.
begin
ClrScr;
Write ('vvedite ime faila : '); {использование Write без Ln оставит курср в этой же строке}
ReadLn (ime);
Assign(f, ime);
Reset (f);
Write ('clovo : ');
ReadLn(clovo);
N := 0; {счетчик количества слов}
While not Eof(f) do begin
ReadLn(f,s1); {считываем строку из файла}
while Pos(clovo,s1) > 0 do begin {слово есть в строке}
N := N + 1; {увеличиваем счетчик}
Delete(s1, Pos(clovo,s1), Length(clovo)); {и удаляем его из строки}
end;
end;
WriteLn('В файле ', N, ' слов');
ReadLn;
end.
Вот и все. Зациклить программу и вывод результатов в файл предлагаю сделать самостоятельно. Если нужно, то часть программы, подсчитывающая число вхождений слова в файл можно оформить в виде функции. Например, так
function CountWords(S: String; var F: Text): Integer;
var S1 : String;
begin
N := 0; {счетчик количества слов}
While not Eof(f) do begin
ReadLn(f,s1); {считываем строку из файла}
while Pos(S, S1) > 0 do begin {слово есть в строке}
N := N + 1; {увеличиваем счетчик}
Delete(S1, Pos(S, S1), Length(S)); {и удаляем его из строки}
end;
end;
CountWords := N;
end;
А обращаться к ней так
WriteLn('В файле ', CountWords(clovo, F), ' слов');
Остальное сами.
Удачи!
while not eof(f) and (pos(clovo,s1)=0
Выполнять пока не "Конец файла" и "номер начиная с которого S1 первый раз входит в clovo, или на оборот,
У тебя в программе Семантика нарушена!!!!
Выполнять пока не "Конец файла" и "номер начиная с которого S1 первый раз входит в clovo, или на оборот,
У тебя в программе Семантика нарушена!!!!
Пока не конец файла и если s1 не найдено в clovo ...
че-то никакой связи с заданием в приведенной програмуле я не нахожу =)) бред полный. . дай задание полностью - все условия и спецификации. если еще надо, помогу с решением=))
Похожие вопросы
- Создать список из повторяющихся слов текста из файла. Первый элемент-наиб. часто повторяющееся слово/ Паскаль. (+)
- Как в паскале посчитать сколько в массиве элементов?
- Вопрос по ПаскалюВводится дата (день, месяц, год) необходимо посчитать сколько дней прошло с начала года.
- как возвести в Паскале выражение в произвольную степень? например в четвертую.
- как открыть читабельно файл MS DOS ???
- Как открыть файл .dat и .dll. Подскажите пожалуйста через какую программу можно открыть эти файлы? (.dat и .dll)
- как открыть dll файл ,а потом его обратно сделать dll?
- у нас в институте программа тестирования.все тесты в ней заложены в формате .dll. как открыть эти файлы,чтобы перетащить
- Паскаль. Работа с текстовым файлом. Нужна помощь
- Вводится число N, а затем N чисел. Подсчитайте, сколько среди данных N чисел нулей.
и кто такая семантика?)
begin
ClrScr;
end; НЕЛЕПОСТЬ!!!!Зачем для функции писать подпрограмму????
s1:=''; вроде не ругается правильно что ли?
while not eof(f) and (pos(clovo,s1)=0 НЕТ СМЫСЛА!!!!
открыл файл, выбрал строку, посчитал сколько раз встречается, звял следующую... и так далее!
m:=0;
While not eof(f) do begin
read(f,s)
l:=false
While l=false do begin
if length(s)>length(clovo) then begin
if pos (clovo,s)>0 then begin m:=m+1; g:=copy(s,((length(s))-(pos(clovo,s))-(length(clovo))),1); s:=''; s:=g end;
else f:=true;
end;
end;
end;
как-то так! незнаю работает не, не проверял, Надеюсь с переменными разберёшься!
УДАЧИ!