1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Парсинг windows-1251

Тема в разделе 'Delphi', создана пользователем Kenpachi™, 14 дек 2010.

  1. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    [​IMG]

    Код программы:

    Код:
    
    unit Unit46;
    
    interface
    
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs,ActiveX, OleCtrls, SHDocVw, StdCtrls;
    
    type
    TForm46 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    WebBrowser1: TWebBrowser;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    
    var
    Form46: TForm46;
    
    implementation
    
    {$R *.dfm}
    function GetHTML(WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
    var
    ps: IPersistStreamInit;
    ss: TStringStream;
    sa: IStream;
    s: string;
    begin
    ps := WebBrowser.Document as IPersistStreamInit;
    s := '';
    ss := TStringStream.Create(s);
    try
    sa := TStreamAdapter.Create(ss, soReference) as IStream;
    Result := Succeeded(ps.Save(sa, True));
    if Result then ACode.Add(ss.Datastring);
    finally
    ss.Free;
    end;
    end;
    procedure TForm46.Button1Click(Sender: TObject);
    begin
    webbrowser1.Navigate('http://www.google.ru');
    
    
    end;
    
    procedure TForm46.Button2Click(Sender: TObject);
    begin
    GetHTML(webbrowser1,memo1.Lines);
    end;
    
    procedure TForm46.FormCreate(Sender: TObject);
    begin
    
    end;
    
    end.
    
    
    
    1 человеку нравится это.
  2. MorzE nullptr AngeliCore Пользователи

    Сообщения:
    198
    Лайки:
    134
    Пол:
    Мужской
    Репутация:
    3
    Страна:
    Russian Federation Russian Federation
    Понаписали то...)) А в пхп это всего 1 строка.
  3. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    PHP-Интерпритатор,по сути дела особого отношения к программирования не имеет.

    Delphi-компилируемый язык программирования с кучей плюх и прочей фигни.

    Это всё равно что сравнить жопу с пальцем.
  4. TopicStarter Overlay

    Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    Не просто так говорят *Программирование на пхп*

    В делфи кста тоже.
    Код:
    St:=RussianToUnicode(IdHTTP1.Get('http://xxxx.ru'));
    На пхп я б давно всё сделал =( Но есть необходимость именно в делфи это всё реализовать.


    Так теперь к делу.
    Не буду создавать новой темы а продолжу тут.
    Мне необходимо реализовать сохранение данных из TListView в XLS.
    В общем вот тут всё описано. Но без примера мне трудно понять.
    Если не сложно показать пример(код) кнопки при нажатии на которую будет происходить сохранение информации из TListView в XLS.
    Столбцы - #, Имя, Фамилия, E-mail адрес, Адрес, Индекс, Город, Страна, Телефон.
    Оть (:
  5. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
     XLS это если я не ошибаюсь это Excel ?

    На делфи сорцах пример довольно сраный для любителей сделать всё самому,есть вариант куда легче.
  6. TopicStarter Overlay

    Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    Он самый Excel (:
    Есть способ проще? Ещё лучше! =)
    Давай свой вариант :D
  7. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    Дай пример какойнибудь базы экселевской хД а то нету на компе.

    Точнее всю базу (*.xls)
  8. TopicStarter Overlay

    Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    Её то как раз и нужно создать и записать в неё данные из ЕListView
    в котором Столбцы - #, Имя, Фамилия, E-mail адрес, Адрес, Индекс, Город, Страна, Телефон.
    И в каждом сталбце записаны значения.
  9. Darkstarko Наказан Пользователи

    Сообщения:
    54
    Лайки:
    10
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    PW-TEAM, J-Games
    на delphiexpert вродебыл урок как работать с xls посмотри может поможет
  10. TopicStarter Overlay

    Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    Почитал про Excel на Delphi и написал вот такой вот код. Всё работает.
    Код:
    procedure TForm3.Button3Click(Sender: TObject);
    var
    exApp : Variant;
    exBook : Variant;
    exSheet : Variant;
    begin
    try
    exApp := CreateOleObject('Excel.Application');
    exApp.Visible := True;
    exBook := exApp.WorkBooks.Add;
    exSheet := exBook.WorkSheets[1];
    exSheet.Name := 'Данные. Лист 1';
    //Формируем шапку таблицы.
    exSheet.Cells[1, 1].Value := 'Имя';
    exSheet.Cells[1, 2].Value := 'Фамилия';
    exSheet.Cells[1, 3].Value := 'Город';
    exSheet.Cells[1, 4].Value := 'Телефон';
    //Записываем данные из лист вьюв
    exSheet.Cells[2, 1].Value := ListView1.Items[0].SubItems[0]; end;
    exSheet := Unassigned;
    exBook := Unassigned;
    exApp := Unassigned;
    finally
    end;
    end;
    Только вот что делать если сюда
    Код:
    exSheet.Cells[2, 1].Value := ListView1.Items[0].SubItems[0]; end;
    нужно добавить несколько данных - ListView1.Items[0-10].SubItems[0-10]
  11. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
  12. TopicStarter Overlay

    Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    :D я в курсе. Мне уточнения нужны были. Ну сделал уже.

    Вопрос теперь такой - Как можно узнать кол-во заполненных столбцов в ListView??????????????????????????
  13. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    ListView.Items.Count
    1 человеку нравится это.
  14. TopicStarter Overlay

    Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    Пасяб.

    Код:
        for i2:=0 to 4 do
    for j2:=StrToInt(edit3.text) to StrToInt(edit4.text) do
    for j3:=0 to ListView1.Items.Count-1 do
    exSheet.Cells[j2+2, i2+1].Value := ListView1.Items[j3].SubItems[i2];
    В чём ошибка?
    Код:
     for j3:=0 to ListView1.Items.Count-1 do
    и
    Код:
    ListView1.Items[j3].SubItems[i2]
    По идеи он должен записывать с 0 по последний заполненный столбец, но копирует поч-то только данные из последнего столбца =(
  15. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    Код:
      exSheet.Cells[j2+2, i2+1].Value := ListView1.Items[j3].SubItems[i2];
    Чтото вот тут,не могу сказать ибо не знаю что происходит с i2 до этого участка.
  16. TopicStarter Overlay

    Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    Проблема я так понимаю заключается в том что я заюзал 3 цикла? оО
  17. TopicStarter Overlay

    Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    i2 это просто цифры от 1 до 4
    Код:
    for i2:=0 to 4 do
    Если я делаю вот так
    Код:
        for i2:=0 to 4 do
    for j2:=0 to 9 do
    exSheet.Cells[j2+1, i2+1].Value := ListView1.Items[j2].SubItems[i2];
    То всё идёт но мне нужно exSheet.Cells[j2+1, i2+1] и ListView1.Items[j2] сделать заполнение разными значениями..
  18. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    Ну я не исключаю ошибку логики.
  19. TopicStarter Overlay

    Kenpachi™ Who Crazy? Old school Пользователи Just a troll

    Сообщения:
    361
    Лайки:
    195
    Пол:
    Женский
    Репутация:
    0
    Команда:
    Solo
    В общем напиши как заполнить вот так
    exSheet.Cells[1180-1190, 1-4].Value := ListView1.Items[0-9].SubItems[1-4];
  20. TheMazzahaka Пользователи

    Сообщения:
    223
    Лайки:
    76
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    J-Games Dev
    Ну вариант тебя не устроит :D ибо писать задротно,но... циклом тут эпик фэйл будет.

    Либо делать массив указателей либо писать ручками.

    2 вариант будет проще.(т.е exSheet.Cells[1180, 1].Value := ListView1.Items[0].SubItems[1]; и т.д. для всех полей =D)
Черновик сохранён Черновик удалён

Поделиться этой страницей