[ Delphi / Pascal ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by begin_end, 28 Apr 2015.

  1. #colorblind

    #colorblind Elder - Старейшина

    Joined:
    31 Jan 2014
    Messages:
    598
    Likes Received:
    220
    Reputations:
    36
    Ну тогда только отладка. Возможно я плохо компилирую в уме, возможно у тебя где-то упущение.
     
  2. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    Знаешь в чём проблема то что этот код работает в мемо но не работает в Tstringlist (
     
  3. crystalbit

    crystalbit Elder - Старейшина

    Joined:
    6 Jun 2008
    Messages:
    217
    Likes Received:
    89
    Reputations:
    8
    Гораздо красивее и проще идти с конца
    PHP:
    for i:=strings.count-1 downto 0 do ...
    Тогда не нужно учитывать сдвиг при удалении элемента
    Подучи матчасть, погугли методы TStringList и TMemo, найди различия. Реально очень глупые вопросы задаёшь. И хотя бы текст ошибок публикуй.
    TMemo1.Lines это TStrings, к слову
     
    alexey-m and #colorblind like this.
  4. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
     
  5. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    уж если ты webbrowser юзаешь, то не проще ли все ссылки как-то так собрать:
    PHP:
    uses
      
    ..., MSHTMLActiveX;

    procedure getLinks(const webDataString; var List: TStringList);
    var
      
    docIHTMLDocument2;
      
    vArrOleVariant;
      
    iInteger;
      
    linksIHTMLElementCollection;
      
    linkString;
    begin
      
    if not Assigned(List) then Exit;

      
    doc:= CoHTMLDocument.Create as IHTMLDocument2;
      
    vArr:= VarArrayCreate([00], varVariant);
      
    vArr[0]:= webData;
      
    doc.write(PSafeArray(TVarData(vArr).VArray));

      if 
    Assigned(docthen begin

        links
    := doc.all.tags('a') as IHTMLElementCollection;

        if (
    links.length 0then begin

          
    for i:= 0 to links.length do begin

            link
    := (links.item(i0) as IHTMLElement).getAttribute('href',0);
            if ( 
    pos('http'link) = then List.Add(link);
          
    end;
        
    end;
      
    end;
    end;
     
  6. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    Как юзать ?
    PHP:
    s:=getLinks(memo1.text)?
     
  7. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    мда... вообще-то getLinks это процедура и у нее 2 обязательных параметра, ну а юзать как-то так:
    Code:
    list:= TStringList.Create; try
      getTradeInfo(htmlPageText, list);
      Memo1.Lines.Assign(list);
    finally
      list.Free;
    end;
    
     
  8. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    А если это сделать бы всё function цены бы этому коду не было
     
  9. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    И пусть меня забанят за оскорбления, но triblekill и тебе подобные, вы реально ох#ели уже. Вам дают практически готовый код, а вы из-за своей лени, даже не хотите допилить его под свои задачи и требуете: "а ну ка, дядя, сделай-ка мне вот так!", пардонте, но тогда вам сюда. А иначе на хрен браться за это, если нет ни желания, ни знаний. Не зная основ, так и придется блудить в темноте.

    ps: накипело! :confused:
     
    binarymaster and #colorblind like this.
  10. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    Я не считаю это за оскорбления ты прав, но помогать тебя никто не заставляет это выбор каждого !
     
  11. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    Что если мне при записи в inifile абсолютно не нужно использовать ключ достаточно только секции ?
    Code:
    Ini.WriteString('Section1',Удали меня полностью и равно после меня тоже,Memo1.Lines.text);
     
    #91 triblekill, 13 Nov 2015
    Last edited: 13 Nov 2015
  12. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    Ага понял только теперь осталось удалить равно =
    Code:
    Ini.WriteString('Section1',#13,Memo1.Lines.text);
     
    #92 triblekill, 13 Nov 2015
    Last edited: 13 Nov 2015
  13. vasykas

    vasykas Banned

    Joined:
    7 Mar 2011
    Messages:
    963
    Likes Received:
    136
    Reputations:
    37
    Если не webbrowser то можно так:
    Code:
    procedure TDThread.pars(url: string);
    var
      Links,list:Tstringlist;
       files:string;
    j,q:integer;
    begin
       inc(q);
       list:=Tstringlist.Create;
       files:=inttostr(q)+'.htm';
       UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, PChar(user), Length(user), 0);
    if Form2.RadioButton1.Checked = True then
    begin
         UserAgent:=user;
         New (proxy_info);
         proxy_info^.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
         proxy_info^.lpszProxy := PAnsiChar(ProxyHost+':'+ProxyPort);
        // proxy_info^.lpszProxyBypass := PAnsiChar('');
         UrlMkSetSessionOption(INTERNET_OPTION_PROXY, proxy_info, SizeOf(Internet_Proxy_Info), 0);
         Dispose(proxy_info);
         URLDownloadToFile(nil,Pchar(url),pchar(files),0,nil);
    if FileExists(files) then list.LoadFromFile(files) else exit;
         DeleteFile(files);
    end;
    if Form2.RadioButton2.Checked = true then
    begin
      UserAgent:=user;
      URLDownloadToFile(nil,Pchar(url),pchar(files),0,nil);
    if FileExists(files) then list.LoadFromFile(files) else exit;
      DeleteFile(files);
    end;
       reg:=TRegExpr.Create;
       reg.Expression:='[\s]{1,}(href=")([^"]+)';
    if reg.Exec(list.text) then
    Repeat
    if Terminated then break;
    if (copy(reg.Match[2],1,5)='http:')or(copy(reg.Match[2],1,4)='www.')or(copy(reg.Match[2],1,5)='https') then begin
    if(pos('?',reg.Match[2])>0)and(pos('<',reg.Match[2])=0) then begin
    if (pos('google.ru',reg.Match[2])=0)and(pos('/account/',reg.Match[2])=0)and(pos('youtube',reg.Match[2])=0)and(pos('blogger',reg.Match[2])=0)and(pos('webcache',reg.Match[2])=0)
    and(pos('facebook.com',reg.Match[2])=0)and(pos('microsofttranslator.com',reg.Match[2])=0)and(pos('msn.com',reg.Match[2])=0)and(pos('mail',reg.Match[2])=0)
    and(pos('yandex',reg.Match[2])=0)and(pos('google.com',reg.Match[2])=0)and(pos('microsoft.com',reg.Match[2])=0)and(not duble(reg.Match[2])) then begin
    if (pos('&amp;',reg.Match[2])<>0)then l:= copy(reg.Match[2],1,pos('&amp;',reg.Match[2])-1);
       link:= reg.Match[2];
    if pos('&',link)>0 then  Delete(link, pos('&',link), Length(link));
        l:=link;
    if (l<>'')and(not duble(l)) then Synchronize(start);
         end;
       end;
      end;
      Until not reg.ExecNext;
       list.Free;
    end;
     
  14. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    То я давно дописал !
    Мне бы сейчас символ = удалить в inifiles
    Code:
    Ini.WriteString('Section1',#13,Memo1.Lines.text);
    Code:
    Result:
    [Section1]
    =строка1
    строка2
    строка3
    строка4
    строка5
    А мне бы хотелось иметь такой результат в ini:
    Code:
    [Section1]
    строка1
    строка2
    строка3
    строка4
    строка5
     
    #94 triblekill, 13 Nov 2015
    Last edited: 13 Nov 2015
  15. vasykas

    vasykas Banned

    Joined:
    7 Mar 2011
    Messages:
    963
    Likes Received:
    136
    Reputations:
    37
    #95 vasykas, 13 Nov 2015
    Last edited: 13 Nov 2015
  16. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    Нет напарываюсь на ошибку при создании (
    Наверное придётся исходники компонента править (
     
  17. #colorblind

    #colorblind Elder - Старейшина

    Joined:
    31 Jan 2014
    Messages:
    598
    Likes Received:
    220
    Reputations:
    36
    А в чем смысл работать с ini файлом, НЕ как с ini файлом?
    Сделай обычный текстовый документ в удобном тебе формате и обрабатывай его.
     
    binarymaster and crystalbit like this.
  18. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    Да я уже тоже думаю забить на Tinifiles
     
  19. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    329
    Likes Received:
    64
    Reputations:
    0
    А как сделать : если строки не начинаются с http удалить эти строки, а строки которые начинаются с : или ; записать в Edit1.text ??
    Делаю: если строки не начинаются с http удалить эти строки так:
    Code:
    var
    list:Tstringlist;
    i:integer;
    for i:=list.count-1 downto 0 do
    if Copy(list.Strings[i],1,1)<>'http'
    then begin
    list.Delete(i);
    memo1.Lines.text:=(List.text);
    
    Строки которые начинаются с http, : и ; содержатся в Tstringlist
     
    #99 triblekill, 13 Nov 2015
    Last edited: 13 Nov 2015
  20. #colorblind

    #colorblind Elder - Старейшина

    Joined:
    31 Jan 2014
    Messages:
    598
    Likes Received:
    220
    Reputations:
    36
    Без разделителей, в одну строку?

    PHP:
    var
       list:
    Tstringlist;
       
    i:integer;
       
    for 
    i:=list.count-1 downto 0 do
       if 
    Copy(list.Strings[i],1,4)='http'
       
    then list.Delete(i);
       else 
    Edit1.Text:=Edit1.Text+list.Strings[i];
     
    triblekill likes this.
Loading...