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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2012, 02:59   #1
Black_Shem
Пользователь
 
Аватар для Black_Shem
 
Регистрация: 29.12.2011
Сообщений: 27
Вопрос Вырезание строки Delphi

Доброго времени суток.

Вообщем есть Twebbrowser.
Мне нужно из загруженной страницы взять некоторые параметры генерируемые скриптом.

Код:
...
<script>
 var tc_arr=[[60410,'Название 1',0],...,[80295,'Название N',289]];
 var tn_arr=[[110,'Название 1',0],...,[895,'Название N',0]];
</script>
...
Мне нужно из этих 2 массивов создать 1 новый массив.

Код:
type
t=record
nameT:string[255];// Имя
zT:integer;// Имеющиеся значение
zTMax:integer;// Максимальное
end;

var
th:array of t;//Динамический массив
где

var tc_arr=[60410,nameT,zT]
var tn_arr=[110,nameT,zTMax]


В голову пришло только то, что HTML код из Webbrowser можно взять и преобразовать в строку. И далее из нее вырезать эти значения.
Но вот тут возникла загвоздка. Пытался сформировать новый массив с помощью copy и delete, Но в конец запутался что где и как это нормально вытащить. Помогите с реализацией кода.

Или может существует иной способ решения проблемы?.
Буду благодарен за помощь.
Лень-двигатель прогресса...
Black_Shem вне форума Ответить с цитированием
Старый 29.01.2012, 11:15   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
function pars(a,b,s:string):string;/////a-откуда начинаем b-где заканчиваем s-строка
var
t:string;
begin
t:=copy(s,pos(a,s)+length(a),length(s));
t:=copy(t,1,pos(b,t)-1);
result:=t;
end;
...........

showmessage(pars('var tc_arr=',';','var tc_arr=[[60410,'Название 1',0],...,[80295,'Название N',289]];'));
дальше сами
Кольша вне форума Ответить с цитированием
Старый 29.01.2012, 11:23   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Набросок для раздумья:
Код:
uses
  SysUtils;
const s='<script>'+
 'var tc_arr=[[60410,`Название 1`,0],...,[80295,`Название N`,289]];'+
 'var tn_arr=[[110,`Название 1`,0],...,[895,`Название N`,0]];'+
'</script>';


var
 w,a:string;i,k,d:integer;
begin
 a:=s;
 i:=pos('[',a); delete(a,1,i);
 while i<>0 do begin
  i:=pos('[',a);  delete(a,1,i);
   k:=pos(']',a)-1; w:=copy(a,1,k);
  d:=pos(',',w); while d<>0 do begin
   write(copy(w,1,d-1)); delete(w,1,d);
   d:=pos(',',w);
  end;
  write(w);
  writeln;
 end;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.01.2012, 21:43   #4
Black_Shem
Пользователь
 
Аватар для Black_Shem
 
Регистрация: 29.12.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Набросок для раздумья:
Спасибо.Натолкнуло на мысли

Вот как реализовал:

Код:
type
t=record
nameT:string[255];// Имя
zT:integer;// Имеющиеся значение
zTMax:integer;// Максимальное
end;
const s='<script>'+
 'var tc_arr=[[60410,`Название 1`,0],[80295,`Название 2`,289]],[80295,`Название 3`,339];'+
 'var tn_arr=[[110,`Название 1`,1],[895,`Название 2`,2],[80295,`Название 3`,555]];'+
'</script>';

var
  Form1: TForm1;
th:array of t;//Динамический массив
kolVT:integer=0;// Количество записей
implementation

{$R *.dfm}

function delcharString(s:string) : string;
const ch =[';','[',']','`'];
var i:integer;
begin
result:='';
for i:=1 to length(s) do
 if not(s[i] in ch) then result:=result+s[i]
end;

function TextToString(a:string):TstringList;
var
st:TstringList;
begin
 // Убираем начало строки до [
 delete(a,1,pos('[',a));
 //Убираем лишнии символы
 a:=delcharString(a);
 // Создаем массив строк
 st:=TstringList.Create;
 ExtractStrings([','], [' '],Pchar(a), st);
 result:=st;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 a,s1:string;
 i,j:integer;
 strT:TStringList;
begin
// Копируем 1 строку
 setlength(th,1);
 a:=s;
 s1:=copy(a,1,pos(';',a));
 // В а 2 строка
 delete(a,1,pos(';',a));
 delete(a,pos(';',a),length(a));
 strT:=TextToString(s1);
 //Создаем массив
 i:=0;
 kolVt:=0;
 while i<strT.count do
 begin
   th[kolVT].nameT:=strT[1+i];
   th[kolVT].zT:=strtoint(strT[2+i]);
   i:=i+3;
   inc(kolVT);
   setlength(th,kolVT+1);
 end;
 //Обработка 2 строки
strT:=TextToString(a);
  i:=0;
  j:=0;
while i<strT.count do
 begin
   th[j].zTMax:=strtoint(strT[2+i]);
   i:=i+3;
   inc(j);
 end;
end;
Лень-двигатель прогресса...
Black_Shem вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вырезание блока текста CraZZy RabbIt PHP 3 30.12.2011 18:04
вырезание и вставка в делфи Kugen Общие вопросы Delphi 1 15.12.2010 16:00
вырезание значений #Н/Д drNabla Microsoft Office Excel 18 10.11.2010 11:09
вырезание фрагмента изображения DeDoK Общие вопросы Delphi 5 12.09.2010 01:00
Вырезание слов KoBRaAndrey Общие вопросы Delphi 5 24.12.2009 20:49