Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2010, 16:02   #1
fize
Форумчанин
 
Регистрация: 24.11.2009
Сообщений: 155
По умолчанию работа со строками delphi

очень извеняюсь но найти не могу. допустим в переменную s (string) поступает информация вида-
Код:
команда

результат

ок\ерор
и выводиться в мемо
memo1.lines.add(s);
как обрезать строки команды и ок\ерор оставив только результат?
fize вне форума Ответить с цитированием
Старый 06.01.2010, 16:33   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

все с AT командами маетесь... copy, pos вам в помощь... вот как резал в своем GSM модуле... 2 способа:
Код:
function sels(s: string; nom: integer): string; //ñòðîêè
 var i,k1,k2,z:integer;
 begin
  result:= ''; z:= 0; k1:= 0; k2:= 0;
  for i:= 1 to length(s) do
   if s[i]=#10 then begin
    
    inc(z);
    if nom  = z then begin k1:= i end;
    if nom+1= z then begin k2:= i end;
   end;

  result:= copy(s, k1+1, k2-k1-2) //2-ñòðîêà
 end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var t: tstringlist;
begin
 caption:= sels(memo1.Lines.Text, 2); // тут задаем номер строки вообще // 1- способ

 t:= tstringlist.create; // 2- способ
 t.Delimiter:= #10;
 t.DelimitedText:= memo1.Lines.Text;
 memo2.Lines.Text:= trim(t[1]); // тут задаем номер значащей строки
 t.Free
end;
смысл ясен?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 06.01.2010 в 16:35.
raxp вне форума Ответить с цитированием
Старый 06.01.2010, 16:50   #3
fize
Форумчанин
 
Регистрация: 24.11.2009
Сообщений: 155
По умолчанию

raxp немного непонятно
fize вне форума Ответить с цитированием
Старый 06.01.2010, 17:01   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вам от модема приходит ответ string содержащий несколько строк, каждая строка содержит разделитель #13#10 (ENTER), следовательно для выделения конкретной визуальной строки нужно парсить, например до знака #10...
Изображения
Тип файла: jpg Копировать из новый-3.jpg (14.4 Кб, 70 просмотров)
Вложения
Тип файла: zip парсер.zip (1.5 Кб, 10 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 06.01.2010, 17:10   #5
fize
Форумчанин
 
Регистрация: 24.11.2009
Сообщений: 155
По умолчанию

вот так уже понятнее. а вот если ответ приходит так-
Код:
команда

результат1
результат2

ок\ерор
как тут быть?
fize вне форума Ответить с цитированием
Старый 06.01.2010, 17:19   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

парсер уже готов, задавай последовательно 2 и 3 или в самом парсере (1) измени nom+2... для парсера (2) изменений никаких.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 06.01.2010, 17:52   #7
fize
Форумчанин
 
Регистрация: 24.11.2009
Сообщений: 155
По умолчанию

raxp непойму. идут ответы-
Цитата:
команда1

ответ1

ок

команда2

тут ответ
на 3
строки

ок
надо ответ ''тут ответ
на 3
строки'' в одну строку чтоли переносить чтобы далее обрабатывать проще было?
fize вне форума Ответить с цитированием
Старый 06.01.2010, 18:01   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

не понял, вы что парсите из memo, то бишь как-бы из архива? парсить нужно то, что идет с com-порта... приведите то, что идет от каждого запроса в отдельности, чтоб не путаться.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 06.01.2010, 18:14   #9
fize
Форумчанин
 
Регистрация: 24.11.2009
Сообщений: 155
По умолчанию

Цитата:
не понял, вы что парсите из memo, то бишь как-бы из архива?
это только для наглядности. естественно как все будет работать стабильно буду парсить из переменной, а уже готовый ответ посылать в мемо.
Цитата:
парсить нужно то, что идет с com-порта... приведите то, что идет от каждого запроса в отдельности, чтоб не путаться.
Код:
procedure TForm1.BComPort1RxChar(Sender: TObject; Count: Integer);
var
 s:string;
 a:array[1..255] of Byte;
 i:integer;
begin
 BComPort1.Read(a, count);
for i:=1 to Count do s:=s+Chr(a[i]);
 memo1.lines.add(s)
end;
посылаем команду1 - получаем ответ1
посылаем команду2 - получаем ответ2 на несколько строк мемо. так?
fize вне форума Ответить с цитированием
Старый 06.01.2010, 18:21   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

код-то я помню, вы тут приведите то, что реально приходит в ответ на 1 команду и на 2-команду отдельно, т.е именно так как в реальных условиях... а вообще-да, сдвигать нужно на к-во строк от предыдущей команды в memo, но имхо это запутывает.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi работа со строками tanek Помощь студентам 7 13.10.2009 15:05
Работа со строками.(Delphi) SfSpawN Помощь студентам 1 09.06.2009 18:13
Работа со строками. Delphi сер4ей Помощь студентам 1 09.03.2009 23:22
Работа со строками. Delphi defeat Помощь студентам 4 10.01.2008 13:39