|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум 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 | Цитировать Найти что-то в тексте (разобрать его на составляющие, или по-научному "пропарсить"
) - одна из наиболее простых и частых задач программирования. Подробнее, какие трудности? И вообще, зачем писать программу? Обычно в таких случаях хватает CTRL+R. |
|
Отправлено: 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
Да ладно? а если я скажу, что в функции была ошибка, не замеченная мною по случаю Нового Года? Я тока щас заметил. Кто рабирается в программировании, сразу ее заметит. Правда, я не знаю, как на ошибку среагирует delphi, поскольку нет возможности проверить код в действии.Перепишу код (и заодно в новом варианте, про который я упоминал): 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 | |
|