AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Eingelesene Zeile wird vorzeitig abgetrennt
Thema durchsuchen
Ansicht
Themen-Optionen

Eingelesene Zeile wird vorzeitig abgetrennt

Ein Thema von Ajintaro · begonnen am 16. Mai 2014 · letzter Beitrag vom 16. Mai 2014
 
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#1

Eingelesene Zeile wird vorzeitig abgetrennt

  Alt 16. Mai 2014, 12:31
Hallo DP !

Ich habe diesmal meine Problemstellung weitestgehend selbst lösen können, allerdings gibt es eine Kleinigkeit, die ich mir nicht erklären kann. Ich untersuche folgende HTML-Reihen:

Code:
<tr class="odd">
<td><img title="IR" align="absmiddle" style="margin-right: 3px;" src="img/IR.png"><a title="yx" class="linkClass" onclick="displayLink('display?TRDB=NO&amp;RNID=08399806&amp;noBack=false'); return false" href="javascript:void(0)">08399806</a></td><td>yout title goes here</td><td>New</td><td>Lucky Luke - Online Support</td><td></td><td>Horses are unlucky</td><td>Maria Herbst</td><td>Tomatoes</td><td>16MAY14 07:41</td><td>16MAY14 07:41</td><td>Medium</td><td>
                            No
                   </td><td> </td><td>6653</td><td> </td><td></td>
</tr>
Insgesamt sind es über 300 solcher Reihen mit identischem Aufbau. Ich möchte jede Tablerow beginnend ab dem Suchwort: RNID= bis zum Reihenende </tr> untersuchen, ob darin bestimmte Zahlenreihen vorkommen. Im obigen Beispiel ist die 6653 versteckt.

Meine Lösung funktioniert im Prinzip recht gut und basiert auf einer Funktion und einer Prozedur:

Delphi-Quellcode:
//Diese Funktion gibt mir einen String zwischen einem Text zurück: aus RNID=1234& wird 1234
function getElementValue(const source, startStr, endStr: String; offset:integer):string;
var
  startIndex, endIndex: integer;
begin
  startIndex := PosEx(startStr, source, offset);
  offset := startIndex + 1;

  if (startIndex > 0) then
  begin
    startIndex := startIndex + Length(startStr);
    endIndex := PosEx(endStr, source, startIndex) + Length(endStr);
    Result := MidStr(source, startIndex, endIndex - startIndex-1);
  end
  else
    Result := '';
end;

//Die Prozedur soll das matching der IDs durchführen
procedure TFmain.Button9Click(Sender: TObject);
var
  i,y, p, startpos: Integer;
  s, rnid: string;
begin
  ListBox1.Clear;//Ergebnis Listbox leeren
  for i := 0 to RichEdit1.Lines.Count - 1 do //im Richedit befindet sich der gesamte HTML-Code mit den 300 Tablerows
  begin
    if Pos('RNID=', RichEdit1.Lines.Strings[i]) > 0 then
    begin
      s := '';
      {Die aktuelle Zeile wird nach der Zeichenfolge "RNID=" durchsucht
      und bei Erfolg ab der gefundenen Position ausgelesen, bis das schließende
       Tag </tr> auftritt...}


      for p := Pos('RNID=', RichEdit1.Lines.Strings[i]) to
        Length(RichEdit1.Lines.Strings[i]) do
        if RichEdit1.Lines.Strings[i][p] <> '</tr>then
          s := s + RichEdit1.Lines.Strings[i][p]
      else
        break;
       
      //Die Zeile wurde identifiziert, nun prüfen ob die SUCH-ID darin vorkommt
       rnid := getElementValue(s,'RNID=','&',1); //RNID aus der Zeile herauslösen

       for y := 0 to listbox_jira.Count-1 do //alle ID Einträge aus der Listbox nacheinander abarbeiten
         begin
           startpos := Pos (listbox_jira.Items[y], s);
           if (startpos > 0) then
             begin
               //Match in die Liste eintragen
               Listbox1.Items.Add('JIRA: '+listbox_jira.Items[y]+' entspricht IR: '+rnid);
             end
             else
             begin
               //nix eintragen
             end;
         end;
    end;
  end;
  // Die Zahl der gefundenen EInträge in Label1 anzeigen...
  if ListBox1.Items.Count > 0 then
    label1.Caption := IntToStr(ListBox1.Items.Count) +
      ' Einträge verglichen'
  else
    label1.Caption := 'Keine IRs gefunden.';
end;
Das Ergebnis ist eigentlich gut: ich erhalte alle 300 IDs und ich vergleiche jede davon mit dem Listbox-Inhalt. Leider wird mein gesuchter Text "abgeschnitten".
In obiger Prozedur sollte der String s aus folgender Zeile bestehen:

Code:
RNID=08399806&amp;noBack=false'); return false" href="javascript:void(0)">08399806</a></td><td>yout title goes here</td><td>New</td><td>Lucky Luke - Online Support</td><td></td><td>Horses are unlucky</td><td>Maria Herbst</td><td>Tomatoes</td><td>16MAY14 07:41</td><td>16MAY14 07:41</td><td>Medium</td><td>
                            No
                   </td><td> </td><td>6653</td><td> </td><td></td>
</tr>
Tatsächlich kommt aber nur folgendes an:

Code:
RNID=08399806&amp;noBack=false'); return false" href="javascript:void(0)">08399806</a></td><td>yout title goes here</td><td>New</td><td>Lucky Luke - Online Support</td><td></td><td>Horses are unlucky</td><td>Maria Herbst</td><td>Tomatoes</td><td>16MAY14 07:41</td><td>16MAY14 07:41</td><td>Medium</td><td>
Gerade der wichtige Teil der versteckten ID wird abgeschnitten und kann somit nicht untersucht werden.

Woran kann den das liegen ? An einem Linefeed ?
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz