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


Автор: golfV 7.12.2009, 09:37
Всем привет есть такой вопрос, разбил строку на несколько частей

Код

Repeat
    setlength(arr,length(arr)+1);
        if pos(',',str)>0 then
      begin
        arr[length(arr)-1]:=copy(str,1, pos(',',str));
        str:=copy(str,pos(',',str)+1, length(str));
      end
    else
      begin
        arr[length(arr)-1]:=str;
        break;
         end
         Until False;
          PrSn:= arr[0];
          PrCode:= arr[1];
          PrRevNr:= arr[2];
         ListBox4.Items.Add(PrSn);
         ListBox4.Items.Add(PrCode);
         ListBox4.Items.Add(PrRevNr);

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

Автор: former 7.12.2009, 10:23
Я делаю так:
Код

procedure StrToList(const S, Sign: string; SList: TStrings);
var
  CurPos: integer;
  CurStr: string;
begin
  SList.clear;
  SList.BeginUpdate();
  try
    CurStr := S;
    repeat
      CurPos := Pos(Sign, CurStr);
      if (CurPos > 0) then
      begin
        SList.Add(Copy(CurStr, 1, Pred(CurPos)));
        CurStr := Trim(Copy(CurStr, CurPos + Length(Sign),
          Length(CurStr) - CurPos - Length(Sign) + 1));
      end
      else
        SList.Add(CurStr);
    until CurPos = 0;
  finally
    SList.EndUpdate();
  end;
end;

procedure TForm1.DoBtnClick(Sender: TObject);
begin
  StrToList('орехи, ягоды, груши, яблоки, малина, сливы',',',ListBox1.Items);
end;

Автор: rodnover 7.12.2009, 10:35
На форме ListBox1, Edit1 и Button1. у Кнопки событие на щелчок Button1Click
Модуль Unit1.pas
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Clear;                             // Очищаем список
// Говорим, что разделитель запятая
  ListBox1.Items.Delimiter := ',';
// Устанавливаем текст с разделителями
  ListBox1.Items.DelimitedText := Edit1.Text;
end;

end.


Автор: golfV 7.12.2009, 10:41
все варианты работают спасибо за совет, но мне надо чтоб записывалось в массив, так как я потом разбитую строку присваиваю переменным. А в листбокс у меня выведенно так для проверки. 

Автор: golfV 7.12.2009, 11:09
Все разобрался, нашел такой способ
Код

 sl := TStringList.create;
          sl.text := stringReplace(str, ',', #13#10,[rfReplaceAll]);
          PrSn:= sl[0];
          PrCode:= sl[1];
          PrRevNr:= sl[2];


спасибо за помощь!

Автор: former 7.12.2009, 11:16
Цитата(golfV @  7.12.2009,  10:41 Найти цитируемый пост)
все варианты работают спасибо за совет, но мне надо чтоб записывалось в массив, так как я потом разбитую строку присваиваю переменным. А в листбокс у меня выведенно так для проверки. 

Ну а что в моем коде не устраивает? Создай переменную типа TStringList и работай с ней.

Автор: golfV 7.12.2009, 11:45
да все устраивает просто сразу неразобрался=)

Автор: rodnover 7.12.2009, 13:19
Именно.
TListBox1.Items аналогична TStringList (точнее TStrings, но не так важна разница)

Автор: Демо 7.12.2009, 15:58
Цитата(golfV @  7.12.2009,  11:09 Найти цитируемый пост)
Все разобрался, нашел такой способ


Это не эффективный код, так как используется StringReplace;

Намного проще вот так:

Код

sl.Delimiter := ',';
sl.DelimitedText := Str;

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