Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Ответить
Настройки темы
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Итак,вопрос начинающего программиста заключается в следующем - имеется следующий текст кода:
Цитата:
// Показываем результат
lbOutput.Caption := Trim(edInput1.Text)+' '+cbSign.Items[cbSign.ItemIndex]+' '+
Trim(edInput2.Text)+' = ' ;
...для меня остаётся непонятным,по какому принципу выставляются знаки апострофа и плюса('+)в данном примере.
Не мог бы кто-нибудь разъяснить это дело?

P.S. Пример кода взят из книги Валерия Фаронова "Система программирования Delphi" .

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 17:41, 19-11-2004

 

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Это опять я со своими вопросами.
Итак,вот ситуация:
имеется текстовый файл(как в примере выше),содержащий текст.В этом тексте есть две определённые ошибки,встречающиеся часто на протяжении всего текста.
Так вот как сделать так,чтобы создаваемая программка открывала этот файл,читала его(типа всё как в примере выше),а затем находила эти определённые(неправильные)символы и заменяла их опять-таки определёнными,но уже правильными символами?Возможно ли такое?Если что,пожалуйста,с комментариями.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 23:24, 28-12-2004 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Найти что-то в тексте (разобрать его на составляющие, или по-научному "пропарсить" ) - одна из наиболее простых и частых задач программирования. Подробнее, какие трудности? И вообще, зачем писать программу? Обычно в таких случаях хватает CTRL+R.

Отправлено: 09:03, 29-12-2004 | #12


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


hasherfrog
Дело в том,что есть такая программка как SubRip,которая выдирает титры из VOB-файлов.Всё работает замечательно,но если титры русские,есть одна запара - программа не распознаёт русской буквы "ы",поэтому при обработке таких титров в теле самой программы вместо "ы" приходится писать "ьl".Этот недостаток можно,конечно,потом самому "ручками" в текстовом редакторе исправить,но это довольно муторно.Поэтому я и хочу автоматизировать этот процесс.
При написании кода для меня остаётся непонятным,как заставить программу найти то,что я ищу,т.е. необходимо ввести какие-то переменные(возможно типа Char)и воспользоваться какой-то процедурой или функцией,чтобы найти нужные символы и затем с помощью оператора присваивания исправить их на нужные,так что ли?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Последний раз редактировалось DillerInc, 30-12-2004 в 00:35.


Отправлено: 17:14, 29-12-2004 | #13


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить 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
...но я никак не могу добиться,чтобы процедура Delete уничтожала символ "ь" .
Следовательно,в чём может быть ошибка?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 18:35, 31-12-2004 | #14


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить 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
На заметку: подучи функции Pos, Delete и Ord. Ты их неверно используешь
Можно и проще, не используя Result (в виде - procedure Convert(var sbInp: String); )

Кстать, а на php/perl такие задачи ваще халява: $your_text=preg_replace('ьl','ы',$your_text);

Отправлено: 04:29, 01-01-2005 | #15


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Savant
Получилось - ну,спасибо!!!

Да,кстати,с Наступившим тебя!

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 16:35, 01-01-2005 | #16


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить 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
Если нужен вариант в виде функции, то можно добавить:
Код: Выделить весь код
function ConvertStrF(const sbInp: String) : String;
begin
  Result := sbInp;
  ConvertStr(Result);
end;

Отправлено: 17:10, 01-01-2005 | #17


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Savant
Цитата:
Да ладно? а если я скажу, что в функции была ошибка
...не знаю,не знаю.Код реализовал,проверил - откомпилированная программа работает исправно.
Если не секрет,то,что за ошибка(для тех,кто с трудом разбирается в программировании )?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 17:37, 01-01-2005 | #18


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


DillerInc
Да не секрет конечно...
Обрати внимание - в цикле for предельное значение переменной k является константой начальной длины входной строки, уменьшенной на единицу. А в процессе замены длина строки уменьшается с каждой заменой на 1 (а предельное значение является константой и не уменьшается), поэтому, если в конце обрабатываемой строки будет "ьl" и несколько "ьl" где-то в середине, то возможно в процедуре Delete() или при чтении из Result[k], где k в данный момент времени уже больше Length(Result), возникнет исключение. Но, к счастью, этого не происходит ни там ни там (хотя не очень понятно почему, может наадо включить Overflow Checking?). Ага, я ток что заглянул в справку по Дельфям и прочитал там кое-что интересное насчет Delete() (исключение генерироваться не будет при выходе за пределы строки):
Цитата:
procedure Delete(var S: string; Index, Count: Integer);

Description

In Delphi code, Delete removes a substring of Count characters from string S starting with S[Index]. S is a string-type variable. Index and Count are integer-type expressions.

If index is larger than the length of the string or less than 1, no characters are deleted.

If count specifies more characters than remain starting at the index, Delete removes the rest of the string. If count is less than or equal to 0, no characters are deleted.
Поэтому изначальный код хоть и работает , но имеет некоторые изъяны. Только маленький вопрос напоследок, а Overflow Checking у тебя включен ?

Или Range Checking...

Последний раз редактировалось Savant, 01-01-2005 в 18:30. Причина: сомнения...


Отправлено: 18:26, 01-01-2005 | #19


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Savant
Огромное спасибо за помощь и советы .
Цитата:
а Overflow Checking у тебя включен ?
...нет,не включен.Лучше включить?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 18:44, 01-01-2005 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[флейм] 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




 
Переход