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


Автор: dikiy 7.12.2006, 14:23
есть строка разделенная запятыми как то, что находится до запятой присвоить переменной
Например строка Вася,Петя,Таня
нао a:=Вася 
       b:=Петя 
       c:=Таня

Автор: Dremlin 7.12.2006, 14:32
читаем хелп по функции

ExtractStrings

Автор: Cashey 7.12.2006, 14:37
Код

  function ExtractWord(N : Byte; const S : String; WordDelims : CharSet) : String;
    {-Given a set of word delimiters, return the N'th word in S}
  var
    I,LL : Word;                 {!!.12}
    Count, Len : Integer;
    Res:string;
  begin
    Count := 0;
    I := 1;
    LL:=length(s);
    Len := 1;
    Res:='';
    while (I <= LL) and (Count <> N) do begin
      {skip over delimiters}
      while (I <= LL) and (S[I] in WordDelims) do
        Inc(I);

      {if we're not beyond end of S, we're at the start of a word}
      if I <= LL then
        Inc(Count);

      if Count = N then Len:= I;
      {find the end of the current word}
      while (I <= LL) and not(S[I] in WordDelims) do Inc(I);
        {if this is the N'th word, add the I'th character to Tmp}
      if Count = N then begin
        Result := Copy(S,Len,I-Len);
        Exit;
      end;
    end;
    Result := '';
  end;


Добавлено @ 14:40 
пример использования
Код

    for i := 1 to G_CountOfChar(s,';')+1 do
        ListBox.Add(ExtractWord(i,s,[';',' ']));
    ListBox.EndUpdate;


ф-ция G_CountOfChar
Код

function G_CountOfChar(const S: string; C: Char): Integer;
asm
        TEST    EAX,EAX
        JE      @@qt
        MOV     ECX,[EAX-4]
        TEST    ECX,ECX
        JE      @@zq
        PUSH    EBX
        LEA     EBX,[EAX-1]
        XOR     EAX,EAX
@@lp:   CMP     DL,BYTE PTR [EBX+ECX]
        JE      @@fn
        DEC     ECX
        JNE     @@lp
        POP     EBX
        RET
@@fn:   INC     EAX
        DEC     ECX
        JNE     @@lp
        POP     EBX
        RET
@@zq:   XOR     EAX,EAX
@@qt:
end;


предложенна Matematik

Автор: Albinos_x 7.12.2006, 14:40
используй функции pos(), Copy() и т.д....

Автор: Rodman 7.12.2006, 14:43
Код

var List:TStringList;
    i:Integer;
    a,b,c:String;
begin
  List:=TStringList.Create;
  try
    List.Text:=StringReplace('Вася,Петя,Таня', ',', sLineBreak, [rfReplaceAll]);
    a:=List.Strings[0];
    b:=List.Strings[1];
    c:=List.Strings[2];
  finally
    List.Free;
  end;
end;


Автор: dikiy 7.12.2006, 14:54
Цитата(Rodman @  7.12.2006,  14:43 Найти цитируемый пост)
var List:TStringList;
    i:Integer;
    a,b,c:String;
begin
  List:=TStringList.Create;
  try
    List.Text:=StringReplace('Вася,Петя,Таня', ',', sLineBreak, [rfReplaceAll]);
    a:=List.Strings[0];
    b:=List.Strings[1];
    c:=List.Strings[2];
  finally
    List.Free;
  end;
end;

Спасибо помогло smile 

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