• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Как Мне Парсить Текст Чтобы Получить Нужные Мне Данные

  • Автор темы Автор темы Sascha
  • Дата начала Дата начала

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,548
Баллы
155
При запросе на сайт мне выдает такой ответ :
Код:
{"result":[{"id":"615007438","labelcode":"05716","label":"FORMATION RECORDS","shortname":"FORMATION","companyname":"Paul Rodriguez Music Ltd.","plm":"0","restrictions":[]},{"id":"615017379","labelcode":"13500","label":"Phazz A Delic NEW FORMAT RECORDINGS","shortname":null,"companyname":"Peter Baumgartner - Haluk Soyoglu GbR","plm":"0","restrictions":[]},{"id":"615020573","labelcode":"14016","label":"unformatted records","shortname":null,"companyname":"Cornils Bartels","plm":"0","restrictions":[]},{"id":"615034650","labelcode":"16938","label":"JAZZ INFORMATION","shortname":"JAZZ INFORMATION 12378","companyname":"","plm":"0","restrictions":[]},{"id":"615054459","labelcode":"20013","label":"Format","shortname":null,"companyname":"","plm":"0","restrictions":[]},{"id":"615253120","labelcode":"35386","label":"No Format","shortname":null,"companyname":"Rights Up","plm":"0","restrictions":[]},{"id":"615280818","labelcode":"48637","label":"Formatik Records","shortname":null,"companyname":"Defensive Music Ltd","plm":"0","restrictions":[]}],"total":"7"}
мне нужно вывести только нужные даные "labelcode" ,"label", "companyname" должно получится вот так :

Код:
05716             FORMATION RECORDS                            Paul Rodriguez Music Ltd.
13500             Phazz A Delic NEW FORMAT RECORDINGS Peter    Baumgartner - Haluk Soyoglu GbR
14016             unformatted records                          Cornils Bartels
16938             JAZZ INFORMATION
20013             Format
35386             No Format                                    Rights Up
48637            Formatik Records                              Defensive Music Ltd
 
по сути на регулярках должно получиться, после работы попробую написать обработчик.
 
по сути на регулярках должно получиться, после работы попробую написать обработчик.
Спасибо заранее , дело в том, что я получаю одну строку иногда две или три, в данном случае семь, приведу пару примеров :
Код:
{"result":[{"id":"615054379","labelcode":"20003","label":"Helios Recordings","shortname":null,"companyname":"","plm":"0","restrictions":[]}],"total":"1"}
Код:
{"result":[{"id":"615262925","labelcode":"40004","label":"FIFTH ON THE FLOOR (50\/50)","shortname":null,"companyname":"","plm":"0","restrictions":[]}],"total":"1"}
Код:
{"result":[{"id":"615000822","labelcode":"11437","label":"BIG CAT","shortname":null,"companyname":"Rough Trade Distribution GmbH","plm":"0","restrictions":[]},{"id":"615256837","labelcode":"37097","label":"BIG CAT RECORDS ENTERTAINMENT","shortname":null,"companyname":"","plm":"0","restrictions":[]}],"total":"2"}
Два одиночных и один двойной.
 
Я заказывал пример по парсу данных в вк , там просто парсишь одну строчку и создаешь цикл через json .
 
а можно как то просто удалить ненужное ?
 
StringReplace не поможет?
не получается, много мусора остается
Mathematics может RegExpr как то сворганить, у меня получается только что то одно из трёх
Код:
 if Pos('labelcode', Memo1.Text) <> 0 then
      R := TRegExpr.Create;
      R.Expression := '"labelcode":"(.*?)"';
    if R.Exec(Memo1.Text) then
      repeat
        Memo2.Lines.Add(R.Match[1]);
      until not R.ExecNext;
 
не получается, много мусора остается
Mathematics может RegExpr как то сворганить, у меня получается только что то одно из трёх
Код:
 if Pos('labelcode', Memo1.Text) <> 0 then
      R := TRegExpr.Create;
      R.Expression := '"labelcode":"(.*?)"';
    if R.Exec(Memo1.Text) then
      repeat
        Memo2.Lines.Add(R.Match[1]);
      until not R.ExecNext;
С регулярками я перегнул всё проще оказалось)
На скрине посмотри верно ведь разобрал?(мемо2)
1BD0YbJ.png
 
С регулярками я перегнул всё проще оказалось)
На скрине посмотри верно ведь разобрал?(мемо2)
в принципе да что должно быть, теперь мне бы расставить по полочкам, чтобы видно было, что куда относится
 
Ну если просто то вот такой лог можно организовать
RTt0tdA.png


А если сложнее можно создать таблицу через listview, но я сам к сожалению новичёк и не понимаю этот компонент(
ПС код скинуть?
 
Ну если просто то вот такой лог можно организовать
RTt0tdA.png


А если сложнее можно создать таблицу через listview, но я сам к сожалению новичёк и не понимаю этот компонент(
ПС код скинуть?
Да , Спасибо за помощь
 
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, RegExpr, Vcl.StdCtrls, sMemo, sButton,
  Vcl.ComCtrls, sListView;

type
  TForm1 = class(TForm)
    sButton1: TsButton;
    sMemo1: TsMemo;
    sMemo2: TsMemo;
    sMemo3: TsMemo;
    sButton2: TsButton;
    procedure sButton1Click(Sender: TObject);
    procedure sButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  StrRez, odin,dva,tri: string;

implementation

{$R *.dfm}

function Pars(T_, ForS, _T: string): string;
var
a, b: integer;
begin
Result := '';
if (T_ = '') or (ForS = '') or (_T = '') then Exit;
a := Pos(T_, ForS);
if a = 0 then Exit
else
a := a + Length(T_);
ForS := Copy(ForS, a, Length(ForS) - a + 1);
b := Pos(_T, ForS);
if b > 0 then Result := Copy(ForS, 1, b - 1);
end;

procedure TForm1.sButton1Click(Sender: TObject);
begin
StrRez:= StringReplace(sMemo3.Lines.Text, '{"id":',#13#10+'{"id":', [rfReplaceAll]);
sMemo1.Lines.Add(StrRez);
end;


procedure TForm1.sButton2Click(Sender: TObject);
var
i: integer;
begin
I := 0;
for I := 1 to sMemo1.Lines.Count do
begin
odin:= pars ('labelcode":"',sMemo1.Lines[i],'",');
dva:= pars ('label":"',sMemo1.Lines[i],'",');
tri:= pars ('companyname":"',sMemo1.Lines[i],'",');
sMemo2.Lines.Add('---------------------------');
sMemo2.Lines.Add(odin);
sMemo2.Lines.Add(dva);
sMemo2.Lines.Add(tri);
sMemo2.Lines.Add('---------------------------');

end;
end;

end.
Местами выдает пустоту, для устранения просто нужно более тщательно обработать начальный текст. Удачи!
 
Сделал табличку
VmJL6zo.png


Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, RegExpr, Vcl.StdCtrls, sMemo, sButton,
  Vcl.ComCtrls, sListView;

type
  TForm1 = class(TForm)
    sButton1: TsButton;
    sMemo1: TsMemo;
    sMemo3: TsMemo;
    sButton2: TsButton;
    sListView1: TsListView;
    procedure sButton1Click(Sender: TObject);
    procedure sButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  StrRez, odin,dva,tri: string;

implementation

{$R *.dfm}

function Pars(T_, ForS, _T: string): string;
var
a, b: integer;
begin
Result := '';
if (T_ = '') or (ForS = '') or (_T = '') then Exit;
a := Pos(T_, ForS);
if a = 0 then Exit
else
a := a + Length(T_);
ForS := Copy(ForS, a, Length(ForS) - a + 1);
b := Pos(_T, ForS);
if b > 0 then Result := Copy(ForS, 1, b - 1);
end;

procedure TForm1.sButton1Click(Sender: TObject);
begin
StrRez:= StringReplace(sMemo3.Lines.Text, '{"id":',#13#10+'{"id":', [rfReplaceAll]);
sMemo1.Lines.Add(StrRez);
end;


procedure TForm1.sButton2Click(Sender: TObject);
var
i: integer;
Item: TListItem;
begin
I := 0;
for I := 1 to sMemo1.Lines.Count do 
begin
odin:= pars ('labelcode":"',sMemo1.Lines[i],'",');
dva:= pars ('label":"',sMemo1.Lines[i],'",');
tri:= pars ('companyname":"',sMemo1.Lines[i],'",');
Item := sListView1.Items.Add;
Item.Caption:= odin;
Item.SubItems.Add(dva);
Item.SubItems.Add(tri);
end;
end;

end.
 
что то у меня невыходит , пустые ячейки постояно иногда выдает только одно:(
 
что то у меня невыходит , пустые ячейки постояно иногда выдает только одно:(
Хм, наверно ты не настроил компонент, ниже скрины:
Добавь 3 колонки смени ListStyle, у колонок выстави AutoSize
rZqmlfv.png


VyPd1WI.png
Вроде больше ничего не менял.
Вот отличный урок по работе с данным компонентом

View: http://www.youtube.com/watch?v=GWdLgktfFDg
 
Вот код прграммы
 

Вложения

Вот код прграммы
Ну тут всё просто, у мемок включи скролл бары будет тебе щастье) Мы ведь строки обрабатываем) А в мемо перенос идёт если не вмещается)
vHSqNNf.png
 
Спасибо за помощь.Как убрать теперь все мемо чтобы осталось только то что искать и результат?
 
Спасибо за помощь.Как убрать теперь все мемо чтобы осталось только то что искать и результат?
Я обычно после отладки в Memo пергоняю всё в TstringList. Они очень похожи, поэтому там немного нужно править.
 
Всё супер только одна проблема при запросе получаю ответ Kristian Vogelberg - Rolf R\u00f6tgers GbR а нужно Kristian Vogelberg - Rolf Rötgers GbR не распознает немецкие буквы Ü, Ö, Ä, как исправить эту проблему
http://www.ulimatbach.de/links/unicode_entities.html вот таблицу нашол
 
Вверх Снизу