Другие языки программирования и технологии
Delphi, переводчик, помогите с кодом!!
есть такой код. есть база данных слов. Существует глюк, появляющийся при вводе в memo1 нескольких строк.procedure TForm1.Button1Click(Sender: TObject);beginedit1.Text:='';s1:='';s:='';{zikl ot pervoy stroki do posledney}for i:=0 to memo1.Lines.Count-1 do begin {vzatie v peremennuyu s stroku} s:=memo1.Lines; s:=' '+s+' '; {ot pervogo do poslednego simvola} for j:=0 to length(s) do begin if s[j]=' ' then begin s1:=copy(s,j1+1,j-j1); j1:=j; s1:=trim(s1); {s1 - otdelnoe slovo bez probelov} {perevod -- poisk po table i vzatie znacheniy} if table1.Locate('ENG', variant(s1),[]) then Edit1.Text:=Edit1.Text+' '+table1.Fields[2].asstring; end; end; memo2.lines[0]:=edit1.Text; end;edit1.Text:=trim(edit1.Text); {clear}end;
Доброго времени суток.
Во-первых, не понятно, зачем добавлять проел в начало считанной строки.
Во-вторых, когда работаете со строками и требуется посимвольный просмотр строки, то цикл должен начинаться с 1, а не с 0. Вы же символы выбираете от первого до последнего.
for j:=1 to length(s) do
В-третьих, если вам надо выделять слово и строки, то можно поступить проще и не анализировать все символы.
s:=memo1.Lines[ i ] + ' '; {пробел в конце необходим}
while Pos(' ', s) > 0 do begin
s1 := Copy(s, 1, Pos(' ', s)-1); {выделили слово}
Delete(s, 1, Pos(' ', s)); {удалили его из строки}
{а здесь обрабатываете выделенное слово}
end;
Если слова разделены более, чем одним пробелом, то сначала можно убрать повторяющиеся пробелы. Как? Подумайте. Это просто.
А вот это не понял.. .
memo2.lines[0]:=edit1.Text;
Вы же пишете все в одно место, в первую строку мемо2. Возможно надо как-то строчки переключать? Или делать так
memo2.lines[ i ]:=edit1.Text;
Впрочем, сильно разбираться нет времени.. .
Удачи!
Во-первых, не понятно, зачем добавлять проел в начало считанной строки.
Во-вторых, когда работаете со строками и требуется посимвольный просмотр строки, то цикл должен начинаться с 1, а не с 0. Вы же символы выбираете от первого до последнего.
for j:=1 to length(s) do
В-третьих, если вам надо выделять слово и строки, то можно поступить проще и не анализировать все символы.
s:=memo1.Lines[ i ] + ' '; {пробел в конце необходим}
while Pos(' ', s) > 0 do begin
s1 := Copy(s, 1, Pos(' ', s)-1); {выделили слово}
Delete(s, 1, Pos(' ', s)); {удалили его из строки}
{а здесь обрабатываете выделенное слово}
end;
Если слова разделены более, чем одним пробелом, то сначала можно убрать повторяющиеся пробелы. Как? Подумайте. Это просто.
А вот это не понял.. .
memo2.lines[0]:=edit1.Text;
Вы же пишете все в одно место, в первую строку мемо2. Возможно надо как-то строчки переключать? Или делать так
memo2.lines[ i ]:=edit1.Text;
Впрочем, сильно разбираться нет времени.. .
Удачи!
s := Memo1.Lines [ i ];
А это что?
s:=memo1.Lines;
string и TStrings - несовместимы!! !
Да и в чем суть глюка?
s:=memo1.Lines;
string и TStrings - несовместимы!! !
Да и в чем суть глюка?
ну я не знаю, дебаггер никто не отменял
тогда уж надо цикл, да и с пробедами решать надо:)
Ну логично, ты учитвываешь только пробелы, а символ перевода каретки и конца строки нет. Если "if s[j]=' ' then" дополнить условием на поиск перевода каретки и конец строки то все заработает.
Похожие вопросы
- Помогите с кодом в Delphi, пожалуйста!
- Помогите разобрать код программы чисел Фибоначчи на Delphi
- Помогите с кодом delphi
- Объясните задачу Delphi. Задача сделана только код я не понимаю!!!!
- Как в Delphi 7 перенести в коде строку, превышено ограничение в 255 символов
- Помогите исправить код чтобы он считал балы теста Pascal
- Всем привет, помогите в коде разобраться С++, вылетает ошибка, вроде все правильно..
- Помогите, лёгкий код C++
- Помогите с кодом на c++
- Помогите откорректировать код в C++