-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
30. Jul 2009
Genau, und um hier länger herumzuraten habe ich weder Zeit noch Lust. Jetzt muss ich erst einmal zur Arbeit.
Wenn du dann bis heute Abend (ich komme gegen 22 Uhr wieder nach Hause) dein Projekt anhängst, würde ich es mir einmal kurz anschauen, dann sehe ich sicher schnell den Fehler. Aber du musst dich eben mit den Grundlagen beschäftigen, sonst nutzt dir das dann auch wenig, wenn ich dir...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
30. Jul 2009
Ja, aber das meinte ich nicht. Erstellst du MomFiles manuell oder wird das Formular automatisch von Delphi erstellt?
Und wo wird der Timer erstellt?
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
30. Jul 2009
So etwas dachte ich mir schon fast, dass du da direkt auf eine bestimmte Instanz (MomFiles) zugreifst.
Kann es sein, dass du das in OnCreate von TMomFiles oder so durchführst? Dann (und generell, wenn das in TMomFiles passiert) lass das MomFiles. weg...
Oder dass du MomFiles manuell erzeugst und wieder freigibst?
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
30. Jul 2009
Dann ist das Programm noch nicht an dem Haltepunkt angekommen...
Dem was mkinzler geschrieben hat kann ich nur voll zustimmen...
Was Debuggen angeht:
http://www.delphipraxis.net/internal_redirect.php?p=326079
http://www.delphi-treff.de/delphi-ide/debugger/
http://www.delphi-treff.de/delphi-ide/haltepunkte/
http://www.delphi-treff.de/delphi-ide/ueberwachte-ausdruecke/
Allgemein:
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
30. Jul 2009
Strg + F7, nicht nur F7. Dann sollte, wenn das Programm am Haltepunkt angehalten hat, das Fenster zum Auswerten eines Ausdrucks angezeigt werden. Dort kannst du dann Self hineinschreiben um zu schauen was das (also der aktuelle Objektzeiger zu der Methode) für einen Wert hat.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
30. Jul 2009
Ich hatte mich nur gefragt, ob du sonst beim Kopieren / Abschreiben noch andere Fehler eingebaut hast... ;-)
Denn der Quelltext sieht soweit funktionierend aus. :gruebel:
Da beim Zugriff auf die Property ein Fehler passiert, setze bitte einmal einen Haltepunkt auf diese Zeile, drücke wenn das Programm dort ankommt Strg + F7 und werte Self aus.
Vermutung: Das könnte nil sein.
Schau da...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
30. Jul 2009
Moment mal...
Das müsste doch eigentlich eine Methode einer Klasse sein, wie sonst kannst du auf die Eigenschaft Zeilenanzahl zugreifen? Und sonst ginge das auch gar nicht als Timer-Ereignis. Das kann so also eigentlich nicht der originale Code sein, wenn sich das kompilieren lässt. :gruebel:
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
29. Jul 2009
Dann musst du schauen wo.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
29. Jul 2009
Naja, fast...
Du weist linenum (dem neuen Wert) Sek.Count zu, der alte jedoch (Zeilenanzahl) hatte vorher den Wert Sek.Count - 1 bekommen.
Fazit:
Der Vergleich wird dann wahr, wenn eine Zeile in der Datei gelöscht wurde... ;-)
Lösung:var Zeilenanzahl, linenum : integer;
begin
try
Sek.LoadFromFile(DreiSek);
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
29. Jul 2009
Ja, du lädst die Datei und wenn die Anzahl gleich ist, dann gehst du raus... (finally wird nach Exit übrigens auch ausgeführt)
Alternativ müsstest du die Dateigröße selbst bestimmen, dann bräuchtest du erst gar nix zu laden.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
29. Jul 2009
Die Größe der Datei / die Anzahl der Zeilen in einem Feld oder einer Eigenschaft speichern und bei einer Änderung den Code durchführen.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
29. Jul 2009
Ja, wo soll das Programm sonst anfangen? Das ist ein Haltepunkt, also ein Punkt zum Anhalten. Heißt: Das Programm hält an, wenn es da ankommt.
Also setze den Haltepunkt, starte das Programm mit F9. Wenn jetzt das Programm dort ankommt, meldet sich Delphi und du kannst schrittweise durchgehen. Dabei würde ich eher F8 empfehlen, da du dann nicht in Funktionsaufrufe hineingehst. (Das musst du...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
28. Jul 2009
Statt irgendwas in eine Textdatei zu schreiben, solltest du lieber im Debugger direkt schauen was da passiert. :roll:
Was passiert denn, wenn du es so machst?
Wie wäre es, wenn du ein kleines Testprojekt anhängst?
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
28. Jul 2009
Was hat das damit zu tun? Es geht doch um das Array, in das zu immer wieder das selbe schreibst...
Statt deiner beiden Schleifen reicht es doch, wenn du in die letzte Zeile schreibst...for s := 0 to Spaltenanzahl - 2 do
StringArray := ZwSpeicher.Strings;
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
28. Jul 2009
Naja, ich würde sagen die Größe setzen ist schon einmal eine gute Idee, aber wie wäre es, wenn du danach auch wirklich nur in die letzte Zeile etwas schreibst? :gruebel:
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
28. Jul 2009
Du hängst doch aber nix an, sondern gehst in der zitierten äußeren Schleife alle Zeilen durch und schreibst die Zeile überall hinein...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
28. Jul 2009
Genau das hast du doch auch geschrieben...Du legst die letzte Zeile in ZwSpeicher und liest danach Zeilenanzahl mal die selben Strings aus. Denn ZwSpeicher.Strings ist ja immer das selbe, wenn die äußere Schleife (z) immer wieder durchläuft...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
27. Jul 2009
Erstens fehlt da ein Ressourcenschutzblock (try..finally), was machst du bei einer Exception in dem Bereich?
Zweitens: Du erzeugst Sek neu. Meinst du, dass Sek.Count etwas anderes als 0 sein kann direkt danach? Was wird also Sek.Strings sein... (usw.)
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
27. Jul 2009
Wie ich schon sagte: Leg die Werte in ein zweidimensionales Array. Dort kannst du dann ja problemlos auf die Spalten zugreifen.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
27. Jul 2009
Wofür gibts den Debugger? :shock:
Naja, da du ja anscheinend keinen kompletten Code posten willst, kann ich da auch nicht viel zu sagen außer dass du anscheinend nix mit den Spalten machst...
Hier mal nen kleines Beispiel (ungetestet):var
FileContents, LineCols: TStringList;
i, j: Integer;
begin
FileContents := TStringList.Create;
try
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
27. Jul 2009
Ich denke du willst da nur etwas berechnen. Was hat denn jetzt plötzlich die Speicherung in einer Datei für einen Sinn? :gruebel:
Ich sehe bei den Variablennamen gerade nicht mehr durch. Was du machen musst ist in StringList A die Datei zu laden. Dann gehst du deren Zeilen durch. Für jede Zeile legst deren Inhalt in DelimitedText von StringList B, dann hast du die Spalten der Zeile in den...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
27. Jul 2009
Weil die Daten erst geparst werden müssen um damit zu arbeiten.
Beispiel:MyList.Delimiter := #9;
MyList.DelimitedText = 'a'#9'b'#9'c';Jetzt hast du in der TStringList drin:a
b
cDu kannst also direkt auf die Spalteninhalte zugreifen.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
27. Jul 2009
Woher kommen denn die Daten? Legst du die selbst in dieses (suboptimale) Format oder hast du darauf keinen Einfluss?
Ja, wie du es machst, wie gesagt, nimm für jede Zeile eine TStringList, weise Delimiter und DelimitedText zu, dann hast du die Spalten. Diese packst du jetzt in ein zweidimensionales Array. Dessen Größe musst du natürlich vorher mit SetLength anpassen.
Das ist sicher nicht die...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by jaenicke,
27. Jul 2009
Je nachdem wie oft du da etwas berechnen willst. Wenn es nur einmal oder so passiert, dann kannst du die einzelnen Spalten einer Zeile mit Hilfe einer weiteren TStringList auslesen und schreiben. Dafür gibt es Delimiter und DelimitedText zum Beispiel.
Wenn das immer wieder passieren soll, solltest du die Daten einmal auslesen in eine richtige Tabelle, z.B. ein zweidimensionales Array, dort...