IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Замена букв в файле.
сообщение
Сообщение #1


Гость






Имеется файл, элементами которого являются отдельные слова. Если слово в файле начинается на букву 'k', то заменить ее на 'K'.
Знаю, что для того чтобы заменить ВСЕ 'k' буквы в файле, программа будет выглядеть примерно так:
var f:file of char;
s:char;
i:integer;
begin
assign (f, 'c:\a.txt');
reset (f);
while (not EoF) do
begin
read (f,s);
if (s='k') then s:='K';
seek(f, filepos(f)-1);
write(f,s);
end;
close(f);
end.


а вот что исправить, чтобы заменялось только если буква находится в начале слова? unsure.gif
Спасибо.

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Не забываем про теги!

Цитата
а вот что исправить, чтобы заменялось только если буква находится в начале слова?

Ничего не исправлять, а написать заново. Пусть файл будет текстовым, тогда читать построчно. Как разложить строку на слова - читай в F.A.Q.


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Смотрел faq, не нашел.
Помогите!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Цитата(Гость @ 22.03.2006 23:26) *

Смотрел faq, не нашел.


НЕ ВЕРЮ!

http://forum.pascal.net.ru/index.php?s=&sh...indpost&p=28059


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: YUra

Репутация: -  0  +


Цитата(APAL @ 23.03.2006 0:31) *


А вот мой вариант программы (работает безотказно-ПРОВЕРЯЛ good.gif ),
правда может чуть не стандартный (писал быстро)

Код

program bukva_k;
uses crt;
const max=20;
var f        :text;
    str      :string;
    i,j,i_max:integer;
    mas:array [1..max] of string;
begin
   assign (f, 'c:\a.txt');
   reset (f);
   i:=1;
   while (not EOF(f)) do
      begin
     readln (f,mas[i]);
     for j:=1 to length(mas[i]) do
        begin
           if (j=1) and (mas[i][j]='k') then mas[i][j]:='K'
           else if (mas[i][j]=' ') and (mas[i][j+1]='k') then mas[i][j+1]:='K';
        end;
      i_max:=i;
      i:=i+1;
      end;
   for i:=1 to i_max do writeln(mas[i]);
   close(f);
end.


Прикрепленные файлы
Прикрепленный файл  FORUM.PAS ( 564 байт ) Кол-во скачиваний: 255
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Спасибо, буквы на экране меняются, но вот в файл почему-то не записываются... nea.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Работает говоришь безотказно ? Хм, а как ты мне объяснишь вот такую запись :

mas[i][j]


при таком описании

mas:array [1..max] of string;


Ну это уже так на сладкое, а вообще твоя программа не прошла ни один тест.

var
s : string;
w : array[1..100] of string;
i,j : byte;

begin
...
reset(f);
i := 0;
while not(eof(f)) do begin
readln(f, s);
inc(i);
if (s[1] in ['k','K']) then w[i] := s[1] else w[i] := s;
end;
rewrite(f);
for j := 1 to i do writeln(f, w[j]);
close(f);
end.


Сообщение отредактировано: volvo -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


klem4, а если в файле больше 100 слов ?
да и память экономить стОит...

var
s:string;

begin
reset(f);
rewrite(f1);
while not(eoF(f)) do
begin
readln(f, s);
if s[1] ='k' then s [1] := 'K';
write(f1,s);
end;
close(f);
close(f1);
erase(f);
rename(f1, {имя оригинального файла)};
end.


да и этой конструкции я не понял:
if (s[1] in ['k','K']) then w[i] := s[1] else w[i] := s;


Сообщение отредактировано: volvo -


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


А если во время заполнения резервного файла в твоем случае, на диске не окажется свободного места ? Ты об этом подумал ? придираться можно сколько угодно.

ps по поводу строки это я переусердствовал :
if s[1] = 'k' then s[1] := 'K'; w[i] := s;


Сообщение отредактировано: volvo -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


ладно, завершу флейм всего одной фразой:
"объем жесткого диска, как правило, в сотни раз превышает объем ОЗУ"


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Я немного добавлю.
Как правило для такой задачи тестовый файл в школе едвали превысит 20 слов.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

Репутация: -  6  +


Цитата(klem4 @ 28.03.2006 7:12) *

Работает говоришь безотказно ? Хм, а как ты мне объяснишь вот такую запись :

mas[ i ][j]


при таком описании

mas:array [1..max] of string;


mas[ i ][j]
А что тебя смущает в такой записи?
Идет обращение к j-ому символу в строке i


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Век живи, век учись ... никогда не видел чтобы так работали с массиовом строк. rolleyes.gif

У меня это вызвало подозрение .. Извиняюсь.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата(TR@N @ 23.03.2006 0:41)
А вот мой вариант программы (работает безотказно-ПРОВЕРЯЛ
Уважаемый TR@N! Вот это ваше заявление вызывает по меньшей мере 2 вопроса: если (как Вы утверждаете, что еще не доказано, об этом поговорим чуть позже), Ваш вариант работает безотказно, то стало быть, по-Вашему, вариант из FAQ работает с ошибками? Очень опрометчиво... Я видела, КАК тестируются те программы, которые приводятся в FAQ-е, не Вам искать в них ошибки. Объясняю - почему:

Цитата(TR@N @ 23.03.2006 0:41)
readln (f,mas[ i ]);
for j:=1 to length(mas[i]) do begin
if (j=1) and (mas[ i ][j]='k') then mas[ i ][j]:='K'
else if (mas[ i ][j]=' ') and (mas[ i ][j+1]='k') then mas[ i ][j+1]:='K';
end;

А скажите-ка мне, уважаемый, ЧТО произойдет, если последний (J) символ строки будет равен пробелу? Не приведет ли это:
mas[ i ][j+1]='k'
к попытке читать символ ЗА концом строки, и соответственно, к результату, которому нельзя верить? FPC, напрмер, на это моментально выдаст Segmentation Fault, результат работы в TP/BP будет зависеть от настроек среды программирования/опций компилятора...

Так что, я бы порекомендовала Вам в следующий раз более внимательно тестировать приводимые программы, и, соответственно, тщательно выбирать выражения...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 4:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name