AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bei Length() bleibt Programm stehen

Ein Thema von BTeam · begonnen am 26. Feb 2004 · letzter Beitrag vom 27. Feb 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BTeam
BTeam

Registriert seit: 17. Sep 2003
Ort: Nordhausen
52 Beiträge
 
Delphi 7 Enterprise
 
#1

Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 13:32
Hi
Ich bastel gerade an einen Programm was einen Große TextDatei (> 10 MB) nach bestimmten Strings durchsucht und dann dort Änderungen vornimmt. Das ganze funktioniert auch bisher ganz prima...allerdings nur mit meiner Kleinere Textdatei die ich zum testen benutzte.
Die TextDatei lade ich in ein RichEdit genauer gesagt benutze ich das TJvxRichEdit und suchen dann mit FindText nach den Textstellen.
Mein Problem ist nun das mein Programm beim testen mit der Großen 10 MB Datei hängen bleibt. Es stürtzt nicht ab oder so sondern bleibt einfach stehen. Ich konnte nach längeren Suchen folgende Zeile für dafür Ausfindig machen

Var ToEnd:Integer
...
ToEnd := Length(Scan.Lines.Text); // hängt

Gibt es noch eine Andere möglichkeit die Textlänge zu bestimmen?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 13:49
da der text scheinbar zu lang zum zählen ist, warum teilst du das ganze nicht einfach auf? die zeichen in jeder zeile zählen und am schluss zusammenzählen. keine garantie dass sich das dann nicht aufhängt, aber einen versuch wärs wert!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 15:40
Zitat von BTeam:
Gibt es noch eine Andere möglichkeit die Textlänge zu bestimmen?
folgende Fragen tauchen da auf:

1. Die Textlänge des gesamten Textes oder den in einer Zeile ?
2. ist es wirklich nur Text und kein Binärcode, Grafiken usw. ?
3. wie sieht das Zeilenende Kennzeichen aus ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 15:44
Hängt es sich auf oder reagiert es nicht mehr? Pack mal in die Schleife ein Application.Processmessages.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von BTeam
BTeam

Registriert seit: 17. Sep 2003
Ort: Nordhausen
52 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 16:37
@Hansa
1. Scan ist das RichEdit also ist Scan.Lines.Text natürlich die gesamtlänge des Textes. Die Länge brauche ich um mit FindText das Richedit zu durchsuchen.
2. es ist eine Reine Textdatei
3. siehe 2

@Luckie
Würde sagen er bleibt einfach hängen. Es läst sich dann auf der Form nichts mehr anklicken. Ich beende das Program dann mit "Programm zurücksetzen" aus dem Delphi Menü. Ich vermute mal das der ~10000000 Byte Große Text für Length() zu viel ist.

Im Prinzip könnte ich auch jeder Zeile über eine Schleife einzeln auf das Vorkommen des gesuchten Stings prüfen, aber ich dachte mir mit FindText geht das sicher etwas schneller.

Application.Processmessages
Bringt nix...Die Code Zeile steht auch nicht in einer Schleife.

begin
StartPos := 0;
ToEnd := Length(Scan.Lines.Text);
...
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 16:49
Zitat von BTeam:
ToEnd := Length(Scan.Lines.Text);
Hierbei muss der String, den Text zurückliefert erst einmal zusammengebaut werden und dass kann länger dauern. Wenn du hier in einer Schleife die Längen zusammenzählst, entfällt das String-"Addieren".
Delphi-Quellcode:
ToEnd := 0;
for i := 0 to Scan.Lines.Count - 1 do
  Inc(ToLen, Length(Scan.Lines[i]) + Length(sLineBreak));
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 18:11
Da es nur ein Text ist, wäre die Gesamtlänge gleich der Dateigröße. Zählen Steuerzeichen etc. nicht mit, dann mußt Du die halt nicht mitzählen. Notfalls Zeichen für Zeichen lesen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von BTeam
BTeam

Registriert seit: 17. Sep 2003
Ort: Nordhausen
52 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 19:01
Naja Zeichen für zeichen...das nicht gerade optimal oder?
Ich habe das jetzt mit einer For Schleife gelöst und lese den Text Zeile für Zeile aus und prüfe mit StrPos(). Ist zwar nicht die beste Lösung funktioniert aber erstmal. Somit Brauche ich das Length() nicht.

Das mit der Dateilänge ist natürlich ne gute Idee ^^ Rein Thoretisch müste ich die Dateilänge - der Zeile im Text rechnen...müste ja dann eigentlich die Textlänge ergeben...oder?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 19:37
Zitat von BTeam:
@Luckie
Würde sagen er bleibt einfach hängen. Es läst sich dann auf der Form nichts mehr anklicken. Ich beende das Program dann mit "Programm zurücksetzen" aus dem Delphi Menü. Ich vermute mal das der ~10000000 Byte Große Text für Length() zu viel ist.
Eben deswegen sollst du es mal mit Application.Processmessages probieren in der Schleife.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von BTeam
BTeam

Registriert seit: 17. Sep 2003
Ort: Nordhausen
52 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Bei Length() bleibt Programm stehen

  Alt 26. Feb 2004, 22:44
Schon klar...
Nur was nützt das Application.Processmessages vor bzw hinter der betreffenden Zeile?
Processmessages hält das Programm kurz an damit, so steht es in der Delphi Help File, die Ereigniswarteschlange verarbeitet werden. In einer Schleife ist das sicher sinnvoll um Zb Button Ereigniss usw abzufragen aber...da ist ja keine Schleife.^^
Oder meinst du da was anderes?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz