Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Разбор строки


Автор: WolfON 25.5.2007, 20:54
Есть строка, допустим:
Код

3 2 1


Надо занести все эти значения в переменные.
Очень хочется найти что-то вроде sreadf(s, "%i %i %i", x, y, z);

Автор: Yanis 25.5.2007, 21:09
Код
var
  x, y, z: Integer;
begin
  with TStringList.Create do
    begin
      Text := StringReplace('3 2 1', #$20, sLineBreak, [rfReplaceAll]);
      x := StrToIntDef(Strings[2], 0);
      y := StrToIntDef(Strings[1], 0);
      z := StrToIntDef(Strings[0], 0);
      Free;
    end;
end;

Решение для частного случая.

Автор: WolfON 25.5.2007, 22:07
Без лишнего и достаточно тяжелого StringList нельзя?

Ищется именно просто решение - регекспы или парсинг строк по частям не подходит

Автор: Yanis 25.5.2007, 22:23
WolfON
Ну тада pos, posex, copy, delete.

Автор: drkot 25.5.2007, 23:48
Цитата(WolfON @  25.5.2007,  22:07 Найти цитируемый пост)
Ищется именно просто решение

А что сложного в коде написанном Yanis?  Если думаеш, что 
Цитата(Yanis @  25.5.2007,  22:23 Найти цитируемый пост)
pos, posex, copy, delete.

проще, тогда вперед.

Автор: WolfON 26.5.2007, 12:51
drkot, я наивно надеялся, что есть встроенные средства.
Просто как-то не очень хорошо выглядит, когда размер кода парсинга строк больше, чем код самой программы )

Автор: 0LineGate 26.5.2007, 13:44
2 WolfON
Конечный пользователь кода твоей программы не увидит, тем более несколько "лишних" килобайт - не смертельно.

Вот только что накатал:
Код

uses StrUtils;

var x,y,z,input: string;
begin
   input:=inttostr(random(99999))+' '+inttostr(random(99999))+' '+inttostr(random(99999))+' ';
   x:=copy(input,0,posex(' ',input,1)-1);
   y:=copy(input,posex(' ',input,1)+1,posex(' ',input,2)-1);
   z:=copy(input,posex(y+' ',input,1)+length(y)+1,length(input)-1);
   z:=copy(input,posex(y,input,1)+length(y)+1,length(input)-1);
   z:=stringreplace(z,' ','',[rfReplaceAll]);
end;


Вроде работает  smile 

Автор: WolfON 26.5.2007, 16:11
0LineGate, конечный пользователь - преподаватель )
Ему как-раз таки и нужен красивый и опрятный код )

Да и мне под кучу задач куда удобнее было-бы переписать "%i %i %i" на допустим "%.2f %i %c %g", чем переписывать этот код.

Автор: drkot 26.5.2007, 16:30
Цитата(WolfON @  26.5.2007,  16:11 Найти цитируемый пост)
"%.2f %i %c %g"

универсальный (в разумных приделах) парсер - это не 10 строк кода. Это пол тысячи строк и неделя упорного труда, как минимум.

Автор: aktuba 26.5.2007, 19:35
Цитата

универсальный (в разумных приделах) парсер


Парсер сам по себе не может быть универсальный... Точно так же, как и автомобиль - один предназначен для одного, другой - для другого...

Цитата

Да и мне под кучу задач куда удобнее было-бы переписать "%i %i %i" на допустим "%.2f %i %c %g", чем переписывать этот код. 


=))) А еще проще было бы, если за тебя это будет делать IDE или компилятор  smile 

Автор: 0LineGate 26.5.2007, 19:56
2 WolfON
работает мгновенно, код аккуратный... препод решит что ты головой мыслишь, решение не запарное, простое...
на конец мона отфоорматировать код  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)