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