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

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

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

 
 Ответить  Открыть новую тему 
> Замена букв в файле.
Nutcase
сообщение 22.03.2006 21:37
Сообщение #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.11.2006 18:52
 К началу страницы 
+ Ответить 
APAL
сообщение 22.03.2006 21:46
Сообщение #2


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

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

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


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

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

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


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


Гость






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


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

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

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


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

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


НЕ ВЕРЮ!

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


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TR@N
сообщение 23.03.2006 0:41
Сообщение #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 байт ) Кол-во скачиваний: 202
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Nutcase
сообщение 27.03.2006 20:33
Сообщение #6


Гость






Спасибо, буквы на экране меняются, но вот в файл почему-то не записываются... nea.gif
 К началу страницы 
+ Ответить 
klem4
сообщение 28.03.2006 6:12
Сообщение #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 - 2.11.2006 18:53


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GoodWind
сообщение 28.03.2006 7:11
Сообщение #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 - 2.11.2006 18:53


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


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

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

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


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

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


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


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


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

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

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


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


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


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

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

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


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
APAL
сообщение 28.03.2006 17:12
Сообщение #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 
 К началу страницы 
+ Ответить 
klem4
сообщение 28.03.2006 17:20
Сообщение #13


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

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

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


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

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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
F.I.A.T.
сообщение 29.03.2006 9:15
Сообщение #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

 



- Текстовая версия 21.07.2025 10:05
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"