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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2011, 15:14   #1
webber9989
dimgunkin
Форумчанин
 
Аватар для webber9989
 
Регистрация: 06.05.2010
Сообщений: 112
По умолчанию Разделители строки в memo. Парсинг.

Пишу чекер, разобрался с потоками, прокси т т.д. Остался один вопрос.
Я беру построчно из memo текст, и делаю запрос на сайт, получаю результат и беру данные со следующей строки, но не об этом щас, у меня такой вопрос, есть ланные вида:

Код:
текст1 | текст2 | текст3 | текст4
Мне нужно спарсить в 4 отдельных переменных текст между разделителями, то есть на выходе, я должен получить:

Код:
s1:= 'текст1';
s2:= 'текст2';
s3:= 'текст3';
s4:= 'текст4';
Помогите плз решить проблему, с парсингом не работал ещё((
mail: dimgunkin@gmail.com
skype: dimgunkin
icq: 684-795-212
webber9989 вне форума Ответить с цитированием
Старый 18.04.2011, 15:27   #2
GoodDA
фрилансер
Форумчанин
 
Аватар для GoodDA
 
Регистрация: 18.07.2008
Сообщений: 107
По умолчанию

вот две функции,
PArse возвращает первое слово, а в строке вырезает его.
GetWord просто по номеру возвращает слово из строки
в обоих можно задать символ разделитель слов

Код:
function Parse(var S: string; const Separators: string): string;
var
  P: Integer;
begin
  P := Pos(Separators, S);
  if P = 0 then
  begin
    Result := S;
    S := '';
  end
  else begin
    Result := Copy(S, 1, P - 1);
    S := Copy(S, P + Length(Separators), Length(S));
  end;
end;

function GetWord(Str:string; Smb: char; WordNmbr: Byte): string;
var SWord: string;
  StrLen, N: Byte;
begin
  StrLen := SizeOf(Str);
  N := 1;
  while ((WordNmbr >= N) and (StrLen <> 0)) do
  begin
    StrLen := Pos(Smb, str);
    if StrLen <> 0 then
    begin
      SWord := Copy(Str, 1, StrLen - 1);
      Delete(Str, 1, StrLen);
      Inc(N);
    end else SWord := Str;
  end;
  if WordNmbr <= N then Result := SWord else Result := '';
end;
GoodDA вне форума Ответить с цитированием
Старый 18.04.2011, 15:29   #3
webber9989
dimgunkin
Форумчанин
 
Аватар для webber9989
 
Регистрация: 06.05.2010
Сообщений: 112
По умолчанию

Я так понимаю S := ''; здесь разделитель указывать?
mail: dimgunkin@gmail.com
skype: dimgunkin
icq: 684-795-212
webber9989 вне форума Ответить с цитированием
Старый 28.07.2011, 21:55   #4
DCamer
Новичок
Джуниор
 
Регистрация: 30.04.2011
Сообщений: 1
По умолчанию

Да вы что, не знает как работать с функциями?
Код:
Parse('text;delimiter', ';');
Первый аргумент — строка, второй — разделитель.
DCamer вне форума Ответить с цитированием
Старый 30.07.2011, 23:36   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Все уже придумано давно. Только обертка сверху, над стандартной функцией, сделать и все.
Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  procedure SepString(Txt :string; L :TStrings; SepChar :Char='|');

implementation

{$R *.dfm}

procedure SepString(Txt :string; L :TStrings; SepChar :Char);
var
  Lst :TStrings;
  I,II :Integer;
begin
 if Trim(Txt) = '' then
  Exit;
 Lst := TStringList.Create;
  try
 ExtractStrings([SepChar], [' '], PChar(Txt), Lst);
 II := Lst.Count;
 if II > 0 then
 begin
   for I := 0 to II - 1 do // ubiraem lishnee iz stroki
   begin
     Lst.Strings[I] := Trim(Lst.Strings[I]);
   end;
   L.Assign(Lst); // kopiruem vo vneshniy spisok
 end;
  finally
 FreeAndNil(Lst);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Itxt :string;
begin
 Button1.Enabled := False;
  try
 ListBox1.Items.Clear;
 Itxt := Memo1.Lines.Text;
 SepString(Itxt, ListBox1.Items, '|');
  finally
 Button1.Enabled := True;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Text := 'текст1 | текст2 | текст3 | текст4';
end;

end.
Вложения
Тип файла: rar ExtractStrings.rar (393.7 Кб, 35 просмотров)
Alter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг строки grafgrial Помощь студентам 14 17.01.2011 14:34
Парсинг строки имени файла NieL Общие вопросы Delphi 3 17.12.2010 14:49
Named pipes, парсинг строки Alex217Vish Visual C++ 0 04.11.2010 22:29
Парсинг следующей строки Fok Общие вопросы Delphi 4 12.09.2010 17:26
Парсинг строки beemoto Общие вопросы Delphi 18 12.04.2009 18:52