Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
BoB@N
Задача:
/В каждом из слов текстового файла замените последнюю букву звёздочкой/

1)Как сделать так,чтобы прога подсчитывала кол-во символов в слове? blink.gif
klem4
Разбиение на слова, все способы

Будут конкретные вопросы, задавай.
BoB@N
Ого как быстро!! blink.gif

М
А чего медлить-то ... я просто знаю все ссылки наизусть ...
ну это шутка конечно blum.gif
klem4

BoB@N
klem4, смотри:
Вот пусть такой простенький первоначальный исходник с надписью в текстовом файле:
“Turbo Pascal Forever”

Код

uses crt;
var
  f: text;
  l: string;

begin
clrscr;
  assign(f, 'd:\text.txt');
  reset(f);
  Read(f,l);
  Writeln(l);
readkey;
end.



Вот пример твоего метода:
Код

const

  limits = [#0..#32,'.',',',':',';','!','?','"'];
type

  TWords = array[1..40] of string;

var
  text : string;
  words : TWords;

function GetWords(s : string; var w : TWords) : byte;
var
  i,back,n : byte;
begin
  i := 1;
  n := 0;
  while(i<=length(s)) do begin
     while(i<=length(s)) and (s[i] in limits) do
      inc(i);
     if i<=length(s) then begin
        back := i;
        while(i<=length(s)) and not(s[i] in limits) do
         inc(i);
        inc(n);
        w[n] := copy(s, back, i-back);
     end;
  end;

  GetWords := n;
end;


Как его применить к данной проге?
klem4
например вот так :
uses crt;

const

limits = [#0..#32,'.',',',':',';','!','?','"'];
type

TWords = array[1..40] of string;

var
txt : string;
words : TWords;
f : text;

function GetWords(s : string; var w : TWords; n : byte) : byte;
var
i,back : byte;
begin
i := 1;
while(i<=length(s)) do begin
while(i<=length(s)) and (s[i] in limits) do
inc(i);
if i<=length(s) then begin
back := i;
while(i<=length(s)) and not(s[i] in limits) do
inc(i);
inc(n);
w[n] := copy(s, back, i-back);
end;
end;

GetWords := n;
end;

var
size : byte;
i : byte;

begin

clrscr;

assign(f, 'c:\test.txt');
reset(f);

size := 0;

while not(eof(f)) do begin
readln(f, txt);
size := GetWords(txt, words, size);
end;

for i := 1 to size do writeln(words[i]);

close(f);

readln

end.
volvo
BoB@N
Цитата
Как сделать так,чтобы прога подсчитывала кол-во символов в слове?

Ты как раз выбрал не совсем подходящий вариант... По той же ссылке, которую тебе дал klem4, прямо перед его способом есть мой способ, при котором
Цитата
(информация о найденных словах хранится в массиве, но НЕ в виде самих слов, а в виде <начало слова в строке, длина слова>)
Я так понимаю, длина слова это то, что тебе надо?
BoB@N
volvo, совершенно верно!
yes2.gif
Только вопрос тот же:
Как применить к исходнику выше... smile.gif
volvo
Цитата
Как применить к исходнику выше

blum.gif
const
delimiter = [#32, ',', '.', '!', ':'];
type
wrd_info = record
start, len: byte;
end;

function get_words(s: string;
var words: array of wrd_info): integer;
var
count: integer;

i, curr_len: byte;

begin
count := -1; i := 1;
while i <= length(s) do begin

while (s[i] in delimiter) and (i <= length(s)) do inc(i);

curr_len := 0;
while not (s[i] in delimiter) and (i <= length(s)) do begin
inc(i); inc(curr_len);
end;

if curr_len > 0 then begin
inc(count);
with words[count] do begin
start := i - curr_len;
len := curr_len
end;
end;

end;
get_words := count + 1;
end;

const
max_word = 255;
var
words: array[1 .. max_word] of wrd_info;
s: string;
i, n: integer;

f: text;

begin
assign(f, 'text.txt');
reset(f);

while not seekeof(f) do begin
readln(f, s);
n := get_words(s, words);
for i := 1 to n do
s[ words[i].start + words[i].len - 1 ] := '*';
writeln(s); { Можно записать в другой файл ... }
end;

close(f)
end.


Проще, не правда ли?
BoB@N
Ой, сдесь что-то не так!!! unsure.gif
(Constant out of range.)

Код

begin
 count := -1; i := 1;
 while i <= length(s) do begin
volvo
Цитата
Ой, сдесь что-то не так!!!

blink.gif У меня работает... Компилятор какой?

Ага... Измени на
var
count: integer;


Странно, FPC пропускает...
GoodWind
Цитата
(Constant out of range.)

wacko.gif у тебя переменная count какого типа ? byte... бегом в конспекты и смотреть миниум и максимум для byte lol.gif

добавил позже:
unsure.gif я только что отправил volvo перечитывать конспекты lol.gif lol.gif lol.gif
прости volovo, я думал это его исходник blush.gif
BoB@N
smile.gif Как я понимаю результат проги должен выводится на экран вроде, например: "Turb* Pasca* Foreve*"...
А у меня просто черный экран unsure.gif
volvo
У тебя в файле последняя строка - пустая? Это глюк Паскаля, если последняя строка файла - НЕ пустая, то она не прочитается через ReadLn(f, ...), так что добавь в файл TXT пустую строку.

P.S. Программа исправлена... Попробуй новую версию...
BoB@N
good.gif Да-а-а мне до вас далеко!!! nea.gif
Огромное СПАСИБО!!! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.