|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI |
|
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI
|
![]() Обратный инженер Сообщения: 644 |
Итак,вопрос начинающего программиста заключается в следующем - имеется следующий текст кода:
Цитата:
Не мог бы кто-нибудь разъяснить это дело? P.S. Пример кода взят из книги Валерия Фаронова "Система программирования Delphi" . |
||
------- Отправлено: 17:41, 19-11-2004 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Это опять я со своими вопросами.
Итак,вот ситуация: имеется текстовый файл(как в примере выше),содержащий текст.В этом тексте есть две определённые ошибки,встречающиеся часто на протяжении всего текста. Так вот как сделать так,чтобы создаваемая программка открывала этот файл,читала его(типа всё как в примере выше),а затем находила эти определённые(неправильные)символы и заменяла их опять-таки определёнными,но уже правильными символами?Возможно ли такое?Если что,пожалуйста,с комментариями. |
------- Отправлено: 23:24, 28-12-2004 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Найти что-то в тексте (разобрать его на составляющие, или по-научному "пропарсить"
![]() |
Отправлено: 09:03, 29-12-2004 | #12 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать hasherfrog
Дело в том,что есть такая программка как SubRip,которая выдирает титры из VOB-файлов.Всё работает замечательно,но если титры русские,есть одна запара - программа не распознаёт русской буквы "ы",поэтому при обработке таких титров в теле самой программы вместо "ы" приходится писать "ьl".Этот недостаток можно,конечно,потом самому "ручками" в текстовом редакторе исправить,но это довольно муторно.Поэтому я и хочу автоматизировать этот процесс. При написании кода для меня остаётся непонятным,как заставить программу найти то,что я ищу,т.е. необходимо ввести какие-то переменные(возможно типа Char)и воспользоваться какой-то процедурой или функцией,чтобы найти нужные символы и затем с помощью оператора присваивания исправить их на нужные,так что ли? |
------- Последний раз редактировалось DillerInc, 30-12-2004 в 00:35. Отправлено: 17:14, 29-12-2004 | #13 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать В общем-то,вот некоторые намётки:
Function GetSymb(sbInp: String) : String; {Эта кустарная функция должна преобразовывать определённые символы в нужные} var k : Integer; begin Result := sbInp; for k := 1 to Length(Result) do begin if Result[k] = 'l' then Result[k] := Chr(Ord('ы')); if Result[k] = 'ь' then Delete(sbInp,Ord('ь'),1); end; end; // GetSymb Следовательно,в чём может быть ошибка? |
------- Отправлено: 18:35, 31-12-2004 | #14 |
![]() Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
Привет! Ну что ж, подправим твою "кустарную" функцию: Function GetSymb(sbInp: String) : String; {Эта кустарная функция должна преобразовывать определённые символы в нужные} var k : Integer; begin Result := sbInp; for k := 1 to Length(Result)-1 do if (Result[k] = 'ь') and (Result[k+1] = 'l') then begin Result[k] := 'ы'; Delete(Result,k+1,1); end; end; // GetSymb Можно и проще, не используя Result (в виде - procedure Convert(var sbInp: String); ) Кстать, а на php/perl такие задачи ваще халява: $your_text=preg_replace('ьl','ы',$your_text); |
Отправлено: 04:29, 01-01-2005 | #15 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Получилось - ну,спасибо!!! ![]() Да,кстати,с Наступившим тебя! |
------- Отправлено: 16:35, 01-01-2005 | #16 |
![]() Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
Да ладно? а если я скажу, что в функции была ошибка, не замеченная мною по случаю Нового Года? ![]() Перепишу код (и заодно в новом варианте, про который я упоминал): procedure ConvertStr(var sbInp : String); {Эта кустарная функция должна преобразовывать определённые символы в нужные} var k : Integer; begin k := 1; while k < Length( Result ) do begin if (sbInp[k] = 'ь') and (sbInp[k+1] = 'l') then begin sbInp[k] := 'ы'; Delete(sbInp,k+1,1); end; inc(k); end; end; // ConvertStr |
Отправлено: 17:10, 01-01-2005 | #17 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Цитата:
Если не секрет,то,что за ошибка(для тех,кто с трудом разбирается в программировании ![]() |
|
------- Отправлено: 17:37, 01-01-2005 | #18 |
![]() Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
Да не секрет конечно... ![]() Обрати внимание - в цикле for предельное значение переменной k является константой начальной длины входной строки, уменьшенной на единицу. А в процессе замены длина строки уменьшается с каждой заменой на 1 (а предельное значение является константой и не уменьшается), поэтому, если в конце обрабатываемой строки будет "ьl" и несколько "ьl" где-то в середине, то возможно в процедуре Delete() или при чтении из Result[k], где k в данный момент времени уже больше Length(Result), возникнет исключение. Но, к счастью, этого не происходит ни там ни там (хотя не очень понятно почему, может наадо включить Overflow Checking?). Ага, я ток что заглянул в справку по Дельфям и прочитал там кое-что интересное насчет Delete() (исключение генерироваться не будет при выходе за пределы строки): Цитата:
Или Range Checking... |
|
Последний раз редактировалось Savant, 01-01-2005 в 18:30. Причина: сомнения... Отправлено: 18:26, 01-01-2005 | #19 |
![]() Обратный инженер Сообщения: 644
|
Профиль | Отправить PM | Цитировать Savant
Огромное спасибо за помощь и советы ![]() Цитата:
|
|
------- Отправлено: 18:44, 01-01-2005 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[флейм] GGK и уголовная ответственность за использование нелицензионного ПО | SPB | Лицензирование продуктов Microsoft | 9 | 20-06-2007 12:38 | |
Delphi - WinApi||C++Builder(Delphi) SplashScreen в отдельном потоке? | XCodeR | Программирование и базы данных | 4 | 12-03-2007 19:51 | |
Delphi - Win32 API | Delphi | Странности с Winapi Timer | Mavlyudov | Программирование и базы данных | 4 | 14-11-2005 10:10 | |
Delphi - Delphi, WinAPI | Корректное завершение программы | fossil | Программирование и базы данных | 6 | 10-08-2005 14:52 | |
Delphi - *Решено* | Использование WinAPI под Delphi | Savant | Программирование и базы данных | 2 | 14-01-2005 21:40 |
|