Autor Beitrag
Silvia
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 :wink:
Silvia Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Di 05.07.05 14:21 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
   sl.Free;
   sl:=TStringList.Create;
   sl.LoadFromFile('C:\test.txt');
// nach einen Begriff suchen
   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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 05.07.05 14:52 
:dance:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Di 05.07.05 14:57 
Wie würde das aussehen in meinem Beispiel:
Wenn aus Name Tüte wird!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
sl.Free;  
   sl:=TStringList.Create;  
   sl.LoadFromFile('C:\test.txt');  
// nach einen Begriff suchen  
   x:=System.Pos('Tüte', sl.Text);


Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 05.07.05 15:00 
Wo ist denn das Problem, was AnsiReplaceStr macht, steht doch in der Hilfe sehr schön drin...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
uses
  StrUtils;

//(...)

   sl:=TStringList.Create;    
   sl.LoadFromFile('C:\test.txt');    
//Alle ä durch ü ersetzen
   sl.Text := AnsiReplaceStr(sl.Text, 'ä''ü');
// nach einen Begriff suchen    
   x := System.Pos('Tüte', sl.Text);
Silvia Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 05.07.05 15:13 
user profile iconSilvia 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 :roll:
ausblenden Delphi-Quelltext
1:
    sl.Text := AnsiReplaceStr(sl.Text, 'Ä1/4''ü');					
Silvia Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 05.07.05 15:32 
user profile iconSilvia hat folgendes geschrieben:
ich hatte zur Vereinfachung Ä1/4 geschrieben, weil ich nicht wusste wie ein ü mit der Tastatur geschrieben wird!

:lol: Woher sollte ich das denn wissen? :mrgreen:

user profile iconSilvia hat folgendes geschrieben:
Jetzt klappt es! Danke!!

Dann ist ja gut! :wink: