Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: programm friert ein, progress bar, leerzeichen ignoriere

  Alt 25. Dez 2005, 18:41
Zitat von Headi:
dann zum zweiten Problem:

Ja es sind zeilenkommentare.
Mit dem pos bin ich irgendwie auch nicht weitergekommen,
irgendwie habe ich immer probleme mit den verschiedenen Formaten, also Strings, string, integer...
Mal eine einfache Lösung:

Delphi-Quellcode:
procedure extractComments(const ListWithComments, ListWithoutComments : TStringList);
var i : Integer;
begin
  // nachschauen, dass keine Referenz = nil ist
  if assigned(ListWithComments) and assigned(ListWithoutComments) then
    begin
      // löschen der Liste in die alle Zeilen ohne Kommentar kommen
      ListWithoutComments.Clear;
      // schauen ob es mindestens eine Zeile gibt
      if ListWithComments.Count > 0 then
        begin
          // übertragen der Einträge, dabei aber jeden Kommentar löschen
          for i := 0 to ListWithComments.Count - 1 do
            begin
              // wenn Zeile einen Kommentar enthält
              // > 1 -> keine Zeile die nur ein Kommentar ist wird kopiert
              if Pos(';', ListWithComments.Strings[i]) > 1 then
                begin
                  // kopieren des Teils der nicht zum Kommentar gehört
                  ListWithoutComments.Add(copy(ListWithComments.Strings[i], 1, Pos(';', ListWithComments.Strings[i]));
                end // if Pos(';', ListWithComments.Strings[i]) > 1
              // sonst die Zeile unverändert kopieren
              else
                begin
                  ListWithoutComments.Add(ListWithComments.Strings[i]);
                end;
            end; // for i := 0 to ListWithComments.Count - 1
        end; // if ListWithComments.Count > 0
    end; // if assigned(ListWithComments) and assigned(ListWithoutComments)
end;
Hier übergibst du einfach zwei StringListen. Die erste enthält den originalen Inhalt inklusive den Kommentaren. Die zweite kann ruhig leer sein (der Inhalt wird auf jeden Fall gelöscht). Es wird nun jede Zeile der ersten Liste genommen und immer der Teil in die zweite Liste kopiert, der vor einem Kommentar kommt. Statt Pos(';' ... ) solltest du lieber eine Konstante benutzen, falls du von ';' mal auf etwas anderes wechseln möchtest.

Zitat von Headi:
drittes Problem:

Also ich glaube, das ist ja sogar normal dass ein Programm bei längeren berechnungen einfriert,
aber ich glaube das kann man doch mit einem thread oder so umgehen?! Nur habe ich leider keine Ahnung davon.
Ja klar, du kannst einen Thread anlegen. Aber Nebenläufigkeit hat ein paar eigene Tücken. Ist nicht wirklich trivial da alles zu berücksichtigen. Du findest eine Menge Tutorials zu Threads und Delphi, aber hier dürfte es reichen, wenn du von Zeit zu Zeit etwas rechenzeit freigibst.
Wenn du eine große Schleife hast, die etwas berechnet und es nur lange dauert, da die Anzahl der Iterationen sehr groß ist, solltest du alle paar Durchläufe ein Application.ProcessMessages einbauen. Dieser Befehl lässt Windows auch andere Nachrichten verarbeiten, die sonst nicht zum Zuge kämen (betrifft dann u.A. neuzeichnen und verschieben von Fenstern).

So, jetzt guck ich doch nochmal in deinen Code. Ach Moment, du benutzt ein paar Komponenten, könntest du bitte angeben welche? (ist immer leichter sich Quellcode anzusehen, wenn man alle Komponenten kennt).

Ach und bitte nicht die .exe in ein zip, sondern nur die Files die man zum selber kompilieren braucht (hab nur einen ISDN Kanal zur Verfügung).

Gruß Der Unwissende
  Mit Zitat antworten Zitat