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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2011, 00:13   #1
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию Снова с парсингом запара.

Подскажите как разобрать на отдельные, имея строку вида:
Код:
string:='abc' + 'def';
string:='abc'+'def';
(вторая без пробелов)
получить значения каждой из них, например, чтоб в мемо попадало
abc
def

Код:
function parser (const s, s1, s2: string): string; 
var
  iPos, iPosLeft, iPosRight: Integer;
begin
  Result := '';
  iPos := Pos(s1, s);
  if iPos > 0 then
  begin
    iPosLeft := iPos + Length(s1);
    iPos := PosEx(s2, s, Succ(iPosLeft));
    if iPos > 0 then
    begin
      iPosRight := iPos;
      Result := MidStr(s, iPosLeft, iPosRight - iPosLeft);
    end;
  end;
end;


Пробовал так, отправляя каждую строку функции, просто второе значение она ну никак не хочет добавлять в мемо.
спасибо за внимание к посту.
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ

Последний раз редактировалось Den7656; 16.11.2011 в 00:23.
Den7656 вне форума Ответить с цитированием
Старый 16.11.2011, 01:03   #2
StartMis
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 175
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var s, s1, s2:string;  i:integer;  flag1:boolean;
begin

s2:=' ''abc''+''def'' ';
s2:='''abc'' + ''def''';

flag1:=false;
for i:=1 to Length(s2) do
begin

if s2[i]='''' then
if not(flag1) then
flag1:= true
else
begin
flag1:=false;
memo1.Lines.Add(s);
s:='';
end;

if flag1 then
if s2[i]<>'''' then
s:= s+ s2[i];

end;


end;

Последний раз редактировалось StartMis; 16.11.2011 в 01:09.
StartMis вне форума Ответить с цитированием
Старый 16.11.2011, 01:20   #3
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

Да, это я и сам знаю. Спасибо. Просто этот пример не сработает если между кавычкой и знаком плюс будут разное количество пробелов, или же в какой-нить стороне (слева или справа его (их)) совсем не будет.
Мне нужно именно чтоб парсил переданную строку от кавычки до кавычки и так далее, пока не будет достигнут конец строки.
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Den7656 вне форума Ответить с цитированием
Старый 16.11.2011, 02:23   #4
Legioner24
Новичок
Джуниор
 
Регистрация: 16.11.2011
Сообщений: 2
Сообщение

То, что написал StartMis будет работать. Пробелы не играют никакой роли, так как они за кавычками..
Legioner24 вне форума Ответить с цитированием
Старый 16.11.2011, 02:48   #5
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
Печаль

Увы, но..
мне нужно получить все переменные (x1,x2,x3) от строчек разных, например:

[CODE]string:='x1'+ 'x2' + 'x3';
string:='x1' +'x2' +'x3';
string:='x1'+ 'x2' +'x3';
string:='x1' + 'x2' + 'x3';
string:= 'x1' +'x2' +'x3';
string:= 'x1'+'x2' + 'x3';
string:= 'x1'________+________'x2'___+__'x3' ;
string:= 'x1' ________+ 'x2'____+'x3';
string:= 'x1'______ + 'x2'___+'x3';
string:= 'x1'____ + 'x2' + __________ 'x3';

т.e. вместо "_" - пробелы (их форум не прописывает) они могут быть везде и много кроме как внутри кавычек, там у нас находится SNRING, который нам и нужно спарсить...
, а процедура StartMis'a для этого не годится, это не работает, нужен именно парсинг строки, вот только как его реализовать... У мя не получается...
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ

Последний раз редактировалось Den7656; 16.11.2011 в 02:54.
Den7656 вне форума Ответить с цитированием
Старый 16.11.2011, 06:37   #6
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Код:
function getStrings(text : string; c:char):string;
var res,s : string;
    tmp : integer;
begin
     res := '';
     s := text;
     tmp := pos(c,s);
     while tmp>0 do
     begin
          s := copy(s,tmp+1,length(s)-tmp);
          if pos(c,s)>pos(#13#10,s) then
          begin
               tmp:=pos(#13#10,s);
               s := copy(s,tmp+2,length(s)-tmp);
          end else
          begin
               res := res + copy(s,1,pos(c,s)-1) + #13 + #10;
               tmp := pos(c,s);
               s := copy(s,tmp+1,length(s)-tmp);
          end;
          tmp := pos(c,s);
     end;
     result := res;
end;
c - кавычка
text - ваш текст с кавычками
результат - текст, заключенный в c в одной (!) строке

если текстовая переменная может иметь переносы, то необходимо удалить пару строк
Код:
function getStrings(text : string; c:char):string;
var res,s : string;
    tmp : integer;
begin
     res := '';
     s := text;
     tmp := pos(c,s);
     while tmp>0 do
     begin
          s := copy(s,tmp+1,length(s)-tmp);
{          if pos(c,s)>pos(#13#10,s) then
          begin
               tmp:=pos(#13#10,s);
               s := copy(s,tmp+2,length(s)-tmp);
          end else}
          begin
               res := res + copy(s,1,pos(c,s)-1) + #13 + #10;
               tmp := pos(c,s);
               s := copy(s,tmp+1,length(s)-tmp);
          end;
          tmp := pos(c,s);
     end;
     result := res;
end;
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 16.11.2011, 10:51   #7
Den7656
Форумчанин
 
Аватар для Den7656
 
Регистрация: 08.06.2011
Сообщений: 103
По умолчанию

Спасибо, все работает.
Жизнь хорошая штука -и⊥ʎdʞ ин ʞɐʞ
Den7656 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с парсингом Pein95 Общие вопросы Delphi 5 14.07.2011 20:11
Помоги с парсингом Coobik Работа с сетью в Delphi 2 21.08.2010 08:54
Проблемы с парсингом строки kakawkin Общие вопросы Delphi 6 06.03.2010 02:06
MDIChild снова и снова... Siber_Dec Общие вопросы Delphi 2 13.12.2009 03:24