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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строку в список 
:(
    Опции темы
JS2
Дата 10.2.2010, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Имеется строка вида: "aaa bbb";"bbb aa;a";"b;bb aaa". Нужно преобразовать ее в список. За символ- разделитель считать ;

Условия разделения на строки:

справа от символа-разделителя должена быть символ " либо это конец строки #0
слева от символа-разделителя должен быть симвод " либо это начало строки #0

Вот что пока набросал:

Код

procedure CheckSyntax(S: string; Delimiter: Char; out All: TStrings);
  var
    Curr: string;
    N, Z: Integer;
  begin
    while S <> '' do
    begin
      N := Pos(Delimiter, S);
      if N = 0 then
        N := Length(S) + 1;
      Curr := Copy(S, 1, N - 1);

      All.Add(Curr);

      Delete(S, 1, N);
    end;
  end;


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

Результат должен быть следующим:

"aaa bbb"
"bbb aa;a"
"b;bb aaa"


у меня же получается:

"aaa bbb"
"bbb aa;
a"
"b;
bb aaa"


Это сообщение отредактировал(а) JS2 - 10.2.2010, 17:30
PM MAIL   Вверх
Matematik
Дата 10.2.2010, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



"Всё уже украдено сделано до нас" (с)
Код

  sl := TStringList.Create;
  try
    sl.QuoteChar := '"';
    sl.Delimiter := ';';
    sl.DelimitedText := '"aaa bbb";"bbb aa;a";"b;bb aaa"';
    ShowMessage(sl.Text);
  finally
    sl.Free
  end;


Это сообщение отредактировал(а) Matematik - 10.2.2010, 17:45
PM MAIL WWW ICQ   Вверх
Mikel
Дата 10.2.2010, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

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



Код

Memo1.Lines.Delimiter:=';';
Memo1.Lines.DelimitedText:='"aaa bbb";"bbb aa;a";"b;bb aaa"';

не пойдет? smile

Добавлено @ 17:47
Эх, Matematik опередил  )

Это сообщение отредактировал(а) Mikel - 10.2.2010, 17:47


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
JS2
Дата 10.2.2010, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



нужно еще контролировать случаи, когда

"aaa b"bb";"aaa bb;b"

в этом случае дожно быть:

"aaa b" bb"
"aaa bb;b"


Это сообщение отредактировал(а) JS2 - 10.2.2010, 17:53
PM MAIL   Вверх
Mikel
Дата 10.2.2010, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

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



Код

uses strUtils;

var s:string;
begin
s:='"aaa" bbb";"bbb aa;a";"b;bb aaa"';
Memo1.Lines.Text:=AnsiReplaceStr(s,'";"','"'#13#10'"');




--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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