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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как разбить строку на части 
:(
    Опции темы
gavr
Дата 27.3.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет! Делаю моё первое приложение. Очень надеюсь на вашу помощь.

Необходимо из строки типа:
"просто какой-то текст(имя_файла)и т.д."
вытащить имя_файла т.е. то что в скобках.
Как проще всего это сделать?
В DRKB (огромное спасибо Vit'у) нашел
Код

var t:TStringList; 

begin 
  t:=TStringList.create; //создаём класс 
  t.text:=stringReplace('Ваша строка для разделения',' ',#13#10,[rfReplaceAll]);//мы заменяем все пробелы на символы конца строки 
//теперь можно убедится что у вас строка разбина на элементы: 
  showmessage(t[0]); 
  showmessage(t[1]); 
  showmessage(t[2]); 
  showmessage(t[3]); 
... 
//после работы надо уничтожить класс 
t.free; 

но компилятор пишет: Undeclared identifier: 'stringReplace'

PM MAIL   Вверх
Zero
Дата 27.3.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



А у тебя в строке Uses , есть модуль "Classes"?
PM MAIL ICQ   Вверх
z-END
Дата 27.3.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Zero если ругается на StringReplace то тогда уж скорее надо смотреть SysUtils прописаны или нет.


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Poseidon
Дата 27.3.2005, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Цитата(gavr @ 27.3.2005, 17:24)
но компилятор пишет: Undeclared identifier: 'stringReplace'
А у меня нормально компилируется. Проверь, подключено ли SysUtils


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Zero
Дата 27.3.2005, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Ну не знаю, у меня лично не ругается, а класс "TStringList" находится в модуле "Classes"
Добавлено @ 17:41
А точно, "SysUtils" нужен... Без него такаяже ошибка выдаётся. smile
PM MAIL ICQ   Вверх
SPrograMMer
Дата 27.3.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


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

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



Vit, то конечно молодец! Но вот если у тебя просто строка (тип String), тогда лучше будет работа со строковыми функциями:
Код

var
  S,Res:String;
  N_1,N_2:Integer;
Begin
  S:='текст просто текст (имя файла) и т. д.';
  N_1:=Pos('(',S);  //номер отк скобки
  N_2:=Pos(')',S);  // ноер закр скобки
  Res:=Copy(S,N_1+1,N_2-N_1-1); // результат
End;


ЗЫ: для первых приложений лучше купить книжку типа "Самоучитель по Delphi" и читать её, чем "лазать" по профсправочникам!

Это сообщение отредактировал(а) SPrograMMer - 27.3.2005, 17:56


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Poseidon
Дата 27.3.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Цитата(Zero @ 27.3.2005, 17:34)
А у тебя в строке Uses , есть модуль "Classes"?
А при чем тут Classes? Регается-то StringReplace, каторая в SysUtils

PS. 2z-END, ну и скорость, опередил!


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
gavr
Дата 27.3.2005, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



SPrograMMerСпасибо всё правильно!!! smile
Цитата
для первых приложений лучше купить книжку типа "Самоучитель по Delphi

Где еще найдешь столько профессионалов готовых помочь тебе за секунды!
PM MAIL   Вверх
FRAGNATIC
Дата 28.3.2005, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


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

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



ещё есть прикольные функций RightStr и LeftStr находящиеся в StrUtils)
Добавлено @ 01:02
а книги в книжных магазинах продаются) + есть куча инет магазинов)
PM MAIL   Вверх
ДЫМ
Дата 28.3.2005, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот моя функция, пожалуй ИМХО самый оптимальный алгоритм (всего один цикл);

Код


type TDelim=set of Char;
        TArrayOfString=Array of String;
 

//*******************
//
// Разбивает строку с разделителями на части
// и возвращает массив частей
//
// fcToParts
//

function fcToParts(sString:String;tdDelim:TDelim):TArrayOfString
var iCounter,iBegin:Integer;
begin//fc
if length(sString)>0 then
 begin
  include(tdDelim,#0);iBegin:=1; SetLength(Result,0);
  For iCounter:=1 to Length(sString)+1 do
   begin//for
    if (sString[iCounter] in tdDelim) then
     begin
      SetLength(Result,Length(Result)+1);
      Result[Length(Result)-1]:=Copy(sString,iBegin,iCounter-iBegin);
      iBegin:=iCounter+1;
     end;
  end;//for
 end;//if
end;//fc


Пример вызова

Код

Array:=fcToParts('строка1(строка2)',['(',')']);






PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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