Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разбить строку 
V
    Опции темы
golfV
Дата 7.12.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 4.11.2007

Репутация: нет
Всего: 1



Всем привет есть такой вопрос, разбил строку на несколько частей

Код

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);

разделяет слова в строке по запятой, а как сделать чтоб он и запятую тоже убирал, некак немогу решить эту проблему. Подскажите кто может.
PM MAIL   Вверх
former
Дата 7.12.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 4
Всего: 17



Я делаю так:
Код

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;



--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
rodnover
Дата 7.12.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 1
Всего: 10



На форме 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.


PM MAIL   Вверх
golfV
Дата 7.12.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 4.11.2007

Репутация: нет
Всего: 1



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

Это сообщение отредактировал(а) golfV - 7.12.2009, 10:42
PM MAIL   Вверх
golfV
Дата 7.12.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 4.11.2007

Репутация: нет
Всего: 1



Все разобрался, нашел такой способ
Код

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


спасибо за помощь!
PM MAIL   Вверх
former
Дата 7.12.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

Репутация: 4
Всего: 17



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

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

Это сообщение отредактировал(а) former - 7.12.2009, 11:18


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
golfV
Дата 7.12.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 4.11.2007

Репутация: нет
Всего: 1



да все устраивает просто сразу неразобрался=)
PM MAIL   Вверх
rodnover
Дата 7.12.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 1
Всего: 10



Именно.
TListBox1.Items аналогична TStringList (точнее TStrings, но не так важна разница)
PM MAIL   Вверх
Демо
Дата 7.12.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 7
Всего: 50



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


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

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

Код

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



--------------------
    
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.