Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.09.2008, 22:45
xCoder xCoder вне форума
Прохожий
 
Регистрация: 08.09.2008
Сообщения: 6
Репутация: 10
По умолчанию Проблема со строкой :(

Добрый вечер! Столкнулся с проблемой которую никак не могу решить, всё облазил и ничего подходящего не нашел. Имею строку текста, например: slkj'sljklskdgjskdjlkdjgsserdb=d;kl;sdlkhlsdhkkd"sd;lskdgjsdlkjslkdj;lksd Как мне найти и записать в другую строчную переменную значение db=d;kl;sdlkhlsdhkkd", точнее текст который идет между db= и "? Никак не могу понять... Буду очень благодарен, три дня вожусь уже.
Ответить с цитированием
  #2  
Старый 08.09.2008, 22:59
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

находишь чотетаное db= и начинаешь писать всё остальное в эту переменную ... пока не найдешь "
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 08.09.2008, 23:02
xCoder xCoder вне форума
Прохожий
 
Регистрация: 08.09.2008
Сообщения: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yurk@
находишь чотетаное db= и начинаешь писать всё остальное в эту переменную ... пока не найдешь "
А с помощью чего это можно реализовать? Я просто пока только учусь.
Ответить с цитированием
  #4  
Старый 08.09.2008, 23:10
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

можно попробовать вот так:
Код:
copy(string,pos('db=',string),length(string)-pos('db=',string)+length('db='));
delete(string,pos(' " ',string),length(string)-pos('"',string)+1);

string - строка текста, с которой проводятся операции

смысл этой ахинеи:
копируем из string, начиная с позиции первого элемента (а именно 'db=') число элементов строки, равное длине строки минус позиция вхождения искомого элемента.

из оставшегося куска строки удаляем элементы, начиная с позиции первого вхождения искомого элемента (' " ') равное длина строки минус позиция элемента.

результат будет в исходной строке string, писал по памяти, но вроде так работает
по операциям над строковым типом данных можно посмотреть вот тут
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard

Последний раз редактировалось cotseec, 08.09.2008 в 23:13.
Ответить с цитированием
  #5  
Старый 08.09.2008, 23:15
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

строка пишется сразу после нахождения знака = и до знака "
Код:
var
i,j:=integer;
stg,db:string;
.......
db:='';
for i:=0 to Length(stg)-1 do
begin
if stg[i]="=" then 
begin 
for j:=i to Length(stg)-i-1 do 
db:=db+stg[i];
end
end;

я не проверял ... но принцып тот же ...
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #6  
Старый 08.09.2008, 23:15
FreeUser FreeUser вне форума
Начинающий
 
Регистрация: 13.08.2008
Сообщения: 119
Репутация: 10
По умолчанию

Здается мне ты парсер пишешь)))))
Ответить с цитированием
  #7  
Старый 08.09.2008, 23:22
xCoder xCoder вне форума
Прохожий
 
Регистрация: 08.09.2008
Сообщения: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от FreeUser
Здается мне ты парсер пишешь)))))
Нет, не парсер.)) Всем спасибо!!! Получилось!
Ответить с цитированием
  #8  
Старый 09.09.2008, 00:11
xCoder xCoder вне форума
Прохожий
 
Регистрация: 08.09.2008
Сообщения: 6
Репутация: 10
По умолчанию Погорячился я немного :)

Заработать, заработало но только на половину.
Вот код:
Цитата:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
copy(a,pos('db=',a),length(a)-pos('db=',a)+length('db='));
delete(a,pos('"',a),length(a)-pos('"',a)+1);
end;
a:string;
Из строки: slkjsljklskdgjskdjlkdjgsserdb=d;kl;sdlkhlsdhkkd"sd ;lskdgjsdlkjslkdj;lksd удаляется все после " а перед db= всё остается т.е. получается строка вида: slkjsljklskdgjskdjlkdjgsserdb=d;kl;sdlkhlsdhkkd
Ответить с цитированием
  #9  
Старый 09.09.2008, 00:27
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

нда, с copy что-то не то, вот еще один вариант:

Код:
delete(а,pos('"',а),length(а)-pos('"',а)+1);
delete(а,1,pos('db=',а)-1);

разобрался, чтобы заработал с copy надо сделать вот так:

Код:
a:=copy(a,pos('db=',a),length(a)-pos('db=',a)+length('db='));
delete(a,pos('"',a),length(a)-pos('"',a)+1);

и окончательно, все в одну строку
Код:
a:=copy(a,pos('db=',a),length(a)-pos('"',a)-5);
__________________
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard

Последний раз редактировалось cotseec, 09.09.2008 в 00:39.
Ответить с цитированием
  #10  
Старый 09.09.2008, 00:35
xCoder xCoder вне форума
Прохожий
 
Регистрация: 08.09.2008
Сообщения: 6
Репутация: 10
По умолчанию

Всё, теперь отлично работает! Спасибо!
Ответить с цитированием
  #11  
Старый 09.09.2008, 11:28
xCoder xCoder вне форума
Прохожий
 
Регистрация: 08.09.2008
Сообщения: 6
Репутация: 10
Восклицание А если несколько? ;)

А если нужно несколько значений из строки вынуть, этот способ же не прокатит уже? Например: kahrtnviutnb=aie"bltnba=tbart"babntabn=rjjb"ddg, и желательно записать в разные переменные, т.е. A исходная строка, в B записать nb=aie", в C ba=tbart", в D bn=rjjb".
Ответить с цитированием
  #12  
Старый 09.09.2008, 21:38
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

А если несколько то можно сделать так:

Код:
var
 Pos1, Pos2: Integer;
 A: String; // твоя строка
 Res: TStrings; // результаты
begin
 Res := TStringList.Create; // инициализаруем

 A := 'kahrtnviutnb=aie"bltnba=tbart"babntabn=rjjb"ddg';

// находим позиции
 Pos1 := Pos('=', A);
 Pos2 := Pos('"', A);

// пока чтото не нашли выполняем...
 while (Pos1 <> 0) or (Pos2 <> 0) do
 begin
  Res.Add(Copy(A, Pos1-2, Pos2-Pos1+3)); // отрезаем нужный нам кусок и загоняем в результат)))
  Delete(A, 1, Pos2); // удалям то что объискали
  Pos1 := Pos('=', A); // пренаходим позиции
  Pos2 := Pos('"', A);
 end;

 Memo1.Lines := Res; // выводи результат

 Res.Free; // особождаем память
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025