Autor |
Beitrag |
Silvia
      
Beiträge: 67
|
Verfasst: Di 05.07.05 13:43
Hallo,
ich habe folgendes Problem mit TStringList:
Ich habe ein Programm welches den Quelltext einer Webseite auswertet! Die webseite wird in ein TStringList eingelesen und ausgewertet! Aber beim einlesen wird nicht der gesammte Quelltext eingelesen sondern nur so ca. die Hälfte! Wenn ich am Anfang des Quelltextes 4 Zeichen lösche, dann werden am ende 4 Zeichen mehr eingelesen!
Mir scheint das die TStringList nicht ausreichend platz reserviert für den gesamten Quelltext! Kann das sein!
Ich arbeite mit D7 und Win2k!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 05.07.05 13:57
Ein klein wenig Quelltext zum Befüllen der TStringList wäre interessant, da mir ATM keine Begrenzung der TStringList bekannt wäre, die ein solches Verhalten liefern würde. Daher vermute ich, dass das ein Problem beim Einlesen der Seite in die StringList ist.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 05.07.05 14:21
Wenn der Quelltext nicht 2GB Zeilen überschreitet, liegt das Problem am Programm.
Also den Source her, sonst nix Hilfe 
|
|
Silvia 
      
Beiträge: 67
|
Verfasst: Di 05.07.05 14:21
Delphi-Quelltext 1: 2: 3: 4: 5:
| sl.Free; sl:=TStringList.Create; sl.LoadFromFile('C:\test.txt'); x:=System.Pos('Name', sl.Text); |
wenn ich mir den Inhalt von sl.text anschaue entspricht er nicht dem von der Datei test.txt!
Mache ich da was falsch?
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.07.05 14:25
Ähh, WO schaust du dir den an, meinst du per Maus drüberhalten beim Debuggen? Da wird einfach nur ein Teil nicht angezeigt!!!
Markier mal sl.Text und drück Strg+F7, wenn du beim Debuggen bist. DANN wird der gesamte Inhalt angezeigt.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 05.07.05 14:26
Wie groß ist die Datei in Byte?
So, wie du auf die StringList zugreifst, beschränkst du dich auf 2GB Zeichen (sl.Text). Aber ich halte es für unwahrscheinlich, dass die Datei 2GB groß ist.
Laut Delphi-Hilfe kann ein String bis zu 2GB Zeichen aufnehmen.
|
|
Silvia 
      
Beiträge: 67
|
Verfasst: Di 05.07.05 14:41
Ah ja,
Okay, ja ich bin mit der Maus drübergefahren und dachte deshalb das nicht alles eingelesen wird! Mein Gedankenfehler!
Jetzt weis ich auch warum mein Name nicht gefunden wurde weil ein Umlaut nicht korrekt dargestellt wird! Wie kann ich ein Ä1/4 in ü wandel?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.07.05 14:52
Dacht ichs mir doch...
Und zum Ersetzen:
Unit StrUtils einbinden und AnsiReplaceStr benutzen, das ersetzt alle Vorkommen eines Strings im angegebenen Text durch einen anderen.
|
|
Silvia 
      
Beiträge: 67
|
Verfasst: Di 05.07.05 14:57
Wie würde das aussehen in meinem Beispiel:
Wenn aus Name Tüte wird!
Delphi-Quelltext 1: 2: 3: 4: 5:
| sl.Free; sl:=TStringList.Create; sl.LoadFromFile('C:\test.txt'); x:=System.Pos('Tüte', sl.Text); |
Moderiert von UGrohne: Code- durch Delphi-Tags ersetzt.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.07.05 15:00
Wo ist denn das Problem, was AnsiReplaceStr macht, steht doch in der Hilfe sehr schön drin...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| uses StrUtils;
sl:=TStringList.Create; sl.LoadFromFile('C:\test.txt'); sl.Text := AnsiReplaceStr(sl.Text, 'ä', 'ü'); x := System.Pos('Tüte', sl.Text); |
|
|
Silvia 
      
Beiträge: 67
|
Verfasst: Di 05.07.05 15:09
Ja, das habe ich verstanden aber
ich kann nicht ä in ü wandel weil aus ü im Quelltext ein Ä1/4 geworden ist!
Hat das was mit dem Ansi Zeichensatz zu tun?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.07.05 15:13
Silvia hat folgendes geschrieben: | Ja, das habe ich verstanden aber
ich kann nicht ä in ü wandel weil aus ü im Quelltext ein Ä1/4 geworden ist!
Hat das was mit dem Ansi Zeichensatz zu tun? |
Also warum das so ist, weiß ich nicht, ich weiß ja nicht, wie die Datei erzeugt wurde. Allerdings vermute ich, dass es etwas mit Unicode und Ansi zu tun hat bzw. der Konvertierung derselben. Scheint das gleiche Problem zu sein, das ich in Delphi 2005 Personal selbst entdeckt habe (Projektversionen verstehen keine Sonderzeichen korrekt)...
Aber als Lösung:
Wenn du das mit AnsiReplaceStr verstanden hast, dann sollte es doch wohl kein problem sein, dann das Ä1/4 wieder richtigzustellen
Delphi-Quelltext 1:
| sl.Text := AnsiReplaceStr(sl.Text, 'Ä1/4', 'ü'); |
|
|
Silvia 
      
Beiträge: 67
|
Verfasst: Di 05.07.05 15:21
Ja, alles Klar!
ich hatte zur Vereinfachung Ä1/4 geschrieben, weil ich nicht wusste wie ein ü mit der Tastatur geschrieben wird!
Jetzt habe ich sl.text makiert und Strg+F7 gedrückt und aus der Anzeige die Zeichen in die Zwischenablage kopiert!
Jetzt klappt es! Danke!!
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 05.07.05 15:32
|
|
|