| Autor |
Beitrag |
Jens Hartmann
      
Beiträge: 120
XP
Delphi
|
Verfasst: Do 19.02.09 23:04
Hallo,
ich versuche es jetzt nochmal hier. Habe in DP schon einen bzw. 2 Thread. Ich möchte aber gerne noch ein letztes mal versuchen. Ich habe jetzt den ganzen Abend schon probiert, ich komme aber einfach nicht weiter. vieleicht kann mir ja hier jemand helfen.
Ich habe in einem alten Thread von mir eine Frage gehabt zur Datenübernahme in ein StringGrid. Leider konnte mir dort bis lang keiner helfen. Vieleicht liegt es ja an dem Titel, da der am Anfang ja einen anderen Hintergrund hatte.
www.delphipraxis.net....html&highlight=
Leider konnte ich das Problem immer noch nicht lösen, und hoffe das mir doch noch jemand weiter helfen kann.
Ich habe noch einen weiteren Thread, mit der aktuellen Frage, wo es überhaupt drum geht.
www.delphipraxis.net....html&highlight=
Um den Fehler nochmal zu beschreiben, ich lese Daten von einer Schnittstelle ein, die ich über eine eigene Unit verarbeite, gebe diese dann zurück an mein FormUnit und möchte sie in einem StringGrid zur Anzeige bringen. Leider funktioniert das nur, wenn ich im DebugModus einen Breakpoint setze.
Nehme ich den Breakpoint dann weg nehme und drücke erneut F9, sehe ich in meinem Programm die Daten im StringGrid. Leider werden aber die ab dem Zeitpunkt kommenden Daten nicht mehr eingetragen.
Start ich das Programm normal, werden gar keine Daten übergeben.
Hat jemand vieleich hier noch eine Idee, wo das dran liegen könnte.
Mein Ziel für später ist es die Daten in ein VirtualTreeView zu übergeben, aber solange das mit dem StringGrid nicht läuft, ist da ja noch ein Grundlegender Fehler.
Die Daten werden ja auch sauber in den Variablen gespeichert.
Hier der Quellcode zur Übergabe
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TForm1.TreeViewResult(ParserTreeView: TMyBaseParser); var i: Integer; Temp1 : String; Temp2 : String; Temp3 : String; Temp4 : String; Temp5 : String; Temp6 : String; begin for i := 0 to High(ParserTreeView.Entries) do begin Temp1 := ParserTreeView.Entries[0].LfdNr; Temp2 := ParserTreeView.Entries[0].Datum; Temp3 := ParserTreeView.Entries[0].Uhrzeit; Temp4 := ParserTreeView.Entries[0].Ereignis; Temp5 := ParserTreeView.Entries[0].Teilnehmer; Temp6 := ParserTreeView.Entries[0].Bereich;
RCount := RCount+1; SGMB256plus.RowCount := RCount+1; SGMB256plus.Cells[0, RCount] := Temp1;
SGMB256plus.Cells[1, RCount] := Temp2;
SGMB256plus.Cells[2, RCount] := Temp3;
SGMB256plus.Cells[3, RCount] := Temp4;
SGMB256plus.Cells[4, RCount] := Temp5;
SGMB256plus.Cells[5, RCount + 1] := Temp6; end; end; |
und noch eine Variante die nicht funktioniert.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| procedure TForm1.TreeViewResult(ParserTreeView: TMyBaseParser); var i: Integer; begin for i := 0 to High(ParserTreeView.Entries) do
Application.ProcessMessages;
begin if ParserTreeView.Entries[i].LfdNr > 0 then begin RCount := RCount+1; SGMB256plus.RowCount := RCount+1; Memo2.Lines.Add(IntToStr(ParserTreeView.Entries[i].LfdNr)); SGMB256plus.Cells[0, RCount + 1] := IntToStr(ParserTreeView.Entries[i].LfdNr); end; if ParserTreeView.Entries[i].Datum <> '' then begin Memo3.Lines.Add(ParserTreeView.Entries[i].Datum); SGMB256plus.Cells[1, RCount + 1] := ParserTreeView.Entries[i].Datum; end; if ParserTreeView.Entries[i].Uhrzeit <> '' then begin Memo4.Lines.Add(ParserTreeView.Entries[i].Uhrzeit); SGMB256plus.Cells[2, RCount + 1] := ParserTreeView.Entries[i].Uhrzeit; end; if ParserTreeView.Entries[i].Ereignis <> '' then begin Memo5.Lines.Add(ParserTreeView.Entries[i].Ereignis); SGMB256plus.Cells[3, RCount + 1] := ParserTreeView.Entries[i].Ereignis; end; if ParserTreeView.Entries[i].Teilnehmer <> '' then begin Memo6.Lines.Add(ParserTreeView.Entries[i].Teilnehmer); SGMB256plus.Cells[4, RCount + 1] := ParserTreeView.Entries[i].Teilnehmer; end; if ParserTreeView.Entries[i].Bereich <> '' then begin Memo7.Lines.Add(ParserTreeView.Entries[i].Bereich); SGMB256plus.Cells[5, RCount + 1] := ParserTreeView.Entries[i].Bereich; end; end; end; |
Ansonsten, hoffe ich das mir jemand hier helfen kann.
Vielen Dank schon mal
Gruß
Jens
Achso, in den Anhang hänge ich ma ein Bild vom Deubugmodus
Einloggen, um Attachments anzusehen!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 19.02.09 23:24
Code-Schnipsel 1: Zeile 32: Wirklich RowCount +1 ???
Schnipsel 2: Das Application.ProcessMessages wird für alle Zeilen einmal ausgeführt, der eigentlich zur For-Schleife gehörige Block wird aber nur einmal ausgeführt ... Ist das beabsichtigt?
Ansonsten: In Schnipsel 1 for dem Ende der Schleife das Application.ProcessMessages eintragen
_________________ 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.
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 20.02.09 07:15
Ne, leider nicht.
Das mit RCount+1 war ein versehen. Habe den Code jetzt abgeändert, geht aber trotzdem nicht.
Das StringGrid wird sogar passend erweitert. nur keine Daten sind zu sehen.
Braucht Ihr vieleicht noch irgendwelche Informationen.
Gruß
Jens 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 20.02.09 12:06
Jap, was ist die ParserTreeView für ne Komponente?
Was passiert, wenn Du die 6 Temp-Einträge mit in ne Listview addest? (Parallel zur StringGrid)
MfG,
BenBE
_________________ 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.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 20.02.09 13:06
BenBE hat folgendes geschrieben : | | Jap, was ist die ParserTreeView für ne Komponente? |
Das ist eine irreführende Bezeichnung, das ist eine Klasse, die ich gebastelt hatte, den Quelltext findest du hier:
www.delphipraxis.net...st999287.html#999287
bzw. als Post im Forum die ein- und umgebaute Version dann hier:
www.delphipraxis.net...1002692.html#1002692
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 20.02.09 15:09
Richtig, die Klasse hat Jaenicke für mich gebastelt.
Funktioniert wie gesagt auch echt super.
Nur das eintragen nicht. Es geht auch nicht, wenn ich die Daten in Memo´s schreibe oder so, es geht immer nur im Debugmodus.
In obigen Codeschnipsel 2 sind ja auch die Memoeiträge, und auch die funktionieren nur im Debugmodus.
Zuletzt bearbeitet von Jens Hartmann am Fr 20.02.09 17:15, insgesamt 1-mal bearbeitet
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 20.02.09 16:30
Ich habe mal noch zum beweise einen Screenshot von meinem StringGrid nach Programmausführung im Debugmodus gemacht.
Einloggen, um Attachments anzusehen!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 20.02.09 16:35
Kannst Du mal schauen, ob das nicht vielleicht auch ein Repaint-Problem sein könnte ??? Also mal explizit nach der Schleife ein Invalidate, bzw. Repaint \ Update aufrufen?
_________________ 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.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 20.02.09 16:35
Also meine Vermutung wäre eigentlich, dass die Datenübergabe aus irgendeinem Grund nicht klappt, was dann durch das Debuggen und der entsprechenden Wartezeit ausgebügelt wird. Weil wenn nicht gerade falscher Speicher überschrieben wird, dann wäre das die plausibelste Erklärung.
// EDIT: Oder so, aber das wäre nur der Fall evtl., wenn es keinerlei Pause gäbe, so sieht das eigentlich auf dem Screenie nicht aus.
// EDIT2:
Oder kann es sein, dass die Daten irgendwie wieder gelöscht werden, weil neue ankommen? 
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 20.02.09 16:51
Das ist ja gerade mein Problem,
1. Sicher, es kommen immer neue Daten, aber im Debugmodus, werden die halt erst dann verarbeitet, wenn die Funktion (mit F7) komplett durchlaufen ist.
2. Ich würde Euch auch gerne das gesamte Program zur Verfügung stellen, nur nütz es Euch ja ohne Hardware nichts.
Mein Problem ist halt nur, wenn ich im Debugmodus sehe das es funktioniert, wie soll ich dann ohne Debugmodus festetllen, warum es nicht funktioniert.
Hilft Euch das komplette Programm weiter ?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 20.02.09 16:55
Jens Hartmann hat folgendes geschrieben : | | 1. Sicher, es kommen immer neue Daten, aber im Debugmodus, werden die halt erst dann verarbeitet, wenn die Funktion (mit F7) komplett durchlaufen ist. |
Das StringGrid kann ja aber auch nicht einfach immer größer werden, die Daten müssen irgendwann doch gelöscht werden, oder?
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 20.02.09 17:07
Das löschen, habe ich noch nich impelmentiert.
Allerdings, nehme ich momentan nur wenig Daten entgegen. Das StringGrid oder später VirtualTreeView, wird später im Anwendungsfall Nachts um 0 Uhr als Datei gespeichert und gelehrt. Somit erreiche ich auch, das ich Tagesbezogene Ereignisspeicher habe.
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 20.02.09 17:22
Habe noch ne neue Erkenntnis.
Setze ich einen Breakpoint an die Stelle, wo Temp1 in das StringGrid übergeben wird, und bestätige immer mit F9 durch, wird immer nur Müll übergeben.
Bestätige ich dann nach ein paarmal mit F7 in einzel Funktionen durch, wird wieder sauber eingetragen.
Im Anhang, kann man genau sehe, ab wann ich mit F7 bedient habe. Ereignis 6732
Einloggen, um Attachments anzusehen!
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 20.02.09 17:40
Ich glaube ich könnte mir vorstellen, wo mein Problem liegt.
Die Übergabe zum Parsen, regel ich in der Datenübernahme von der Com-Schnittstelle,
Dort gibt es einmal eine Funktion, die die Daten Zeilenweiße in die Var. Zeile schreibt, die dann über eine Case Anweisung an die entsprechende Datenverarbeitung für mein bislang genutztes Memo gegeben wird.
In der selben Funktion, liegt aber auch die Verarbeitung, die meinen Datensatz (aber nicht Zeilenweiße, sondern als gesamten Satz) an Jeanick´s Klasse Parsen übergibt.
Jetzt wird ja die Zeile mehrfach ausgeführt und die Var. Übergabe nur alle 4-6 Zeilen als Fertig angesehen, kann es vieleicht sein, das dadurch mein StringGrid, jedoch immer gezeichnet wird und ich somit nichts im StringGrid oder so sehe?
Hier mal die komplette lese Funktion:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| Procedure TForm1.Bufferverarbeitung; Var I :Integer; Laenge :Integer; Übergabe :String; ParserTreeView :TMyBaseParser; EndeDatensatz :Integer; begin Laenge:=Length(Buffer); I:=1; while I < Laenge+1 do begin Zeile:=Zeile+Buffer[I]; Übergabe:=Übergabe+Buffer[I]; IF Buffer[I] =#13 then begin
case RGZentralentyp.ItemIndex of 0 : DatenverarbeitungMB24; 1 : DatenverarbeitungMB48; 2 : DatenverarbeitungMB100; 3 : DatenverarbeitungMB256; 4 : DatenverarbeitungUEZ2000; 5 : DatenverarbeitungBMC1024; end;
I:=I+2; if Buffer[I] = #13 then begin Übergabe := StringReplace(Übergabe, #154, 'Ü', [rfReplaceAll]); Übergabe := trim(StringReplace(Übergabe, #$D, '', [rfReplaceAll])); Übergabe:= StringReplace(Übergabe, #129, 'ü', [rfReplaceAll]); Übergabe := trim(StringReplace(Übergabe, #132, 'ä', [rfReplaceAll])); Übergabe := StringReplace(Übergabe, #142, 'Ä', [rfReplaceAll]); Übergabe := StringReplace(Übergabe, #148, 'ö', [rfReplaceAll]); Übergabe := StringReplace(Übergabe, #153, 'Ö', [rfReplaceAll]); Übergabe := StringReplace(Übergabe, #154, 'Ü', [rfReplaceAll]); Übergabe := StringReplace(Übergabe, #10#13, ' ', [rfReplaceAll]);
ParserTreeView := TMyParserMB256plus.Create; ParserTreeView.Parse(Übergabe); TreeViewResult(ParserTreeView); ParserTreeView.Free; Übergabe := ''; end; I:=I-2; end; INC(I); end; Buffer:=''; end; |
[EDIT] Im Anhang die Daten wie sie im Memo aussehen.
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von Jens Hartmann am Fr 20.02.09 19:31, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 20.02.09 17:44
Solange dein Programm was ohne Pause tut, kann auch nix auf dem Formular aktualisiert werden. Dafür würde dann Application.ProcessMessages dienen, das an der Stelle die Abarbeitung der aufgelaufenen Botschaften (auch zum Zeichnen) erlaubt.
Das darfst du dann natürlich nicht so machen wie in deinem Anfangspost: Delphi-Quelltext 1: 2: 3: 4: 5:
| for i := 0 to High(ParserTreeView.Entries) do Application.ProcessMessages;
begin ... | Da wird in der Schleife nur das ausgeführt und das nach dem Begin außerhalb der Schleife...
Da sollte auch eine entsprechende Warnung kommen, dass nach dem begin i nicht initialisiert ist oder so.
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 20.02.09 18:16
Ja, das ist richtig.
Das habe ich ja auch geändert.
Ich will ja auch gerne selber auf den Fehler komme, und ich denke ich gebe mir schon wirklich mühe.
Aber meine Kenntnise, helfen mir einfach nicht mehr weiter, wie ich jetzt weiter machen könnte..
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 20.02.09 18:28
Schreib mal ein ShowMessage(Übergabe); vor die Zeile ParserTreeView.Parse(Übergabe);. Wenn dann alles richtig geht, dann schreib mal an der selben Stelle nur in eine Datei: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var LogFile: Textfile; ... AssignFile(LogFile, ExractFilePath(ParamStr(0)) + 'Log.txt'); if FileExists(ExractFilePath(ParamStr(0)) + 'Log.txt') then Reset(LogFile) else Rewrite(LogFile); WriteLn(LogFile, Übergabe); CloseFile(LogFile); | Steht es dann da richtig drin?
Nebenbei sollten Variablennamen wenn schon nicht englisch  dann doch zumindest ohne Umlaute geschrieben werden, sonst kann das mit einem Delphi auf einem englischen System Überraschungen geben. 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 20.02.09 18:30
_________________ 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.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 20.02.09 18:36
So heißt die Variable, deshalb habe ich das ja überhaupt geschrieben. 
|
|
Jens Hartmann 
      
Beiträge: 120
XP
Delphi
|
Verfasst: Fr 20.02.09 19:18
So, meine Variable heißt jetzt Data, wie in dem Unit Parsen.
Also, ich habe das jetzt alles ausprobiert, im ShowMessage, werden die Daten angezeigt. In die Textdatei werden sie auch geschrieben.
Allerdings, teilweise ziemlich unsauber,
Betätige ich die ENTER Taste nach ShowMessage ganz schnell, kann es vorkommen, das der Datensatz unsauber aussieht, also es fehler Teil.
Betätige ich die ENTER Taste so im 2 sek takt, sind die Datensätze sauber. Kann es sein das meine Hardware nicht schnell genug liefert?
Setze ich folgende Funktion (Delay(2000) an die Stelle wo ShowMessage war Funktioniert es. Relativ gesehen, die Daten sind teilweise verschoben. siehe Anhang.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65:
| Procedure TForm1.Bufferverarbeitung; Var I :Integer; Laenge :Integer; Data :String; ParserTreeView :TMyBaseParser; LogFile: Textfile;
begin Laenge:=Length(Buffer); I:=1; while I < Laenge+1 do begin Zeile:=Zeile+Buffer[I]; Data:=Data+Buffer[I]; IF Buffer[I] =#13 then begin
case RGZentralentyp.ItemIndex of 0 : DatenverarbeitungMB24; 1 : DatenverarbeitungMB48; 2 : DatenverarbeitungMB100; 3 : DatenverarbeitungMB256; 4 : DatenverarbeitungUEZ2000; 5 : DatenverarbeitungBMC1024; end;
I:=I+2; if Buffer[I] = #13 then begin Data := StringReplace(Data, #154, 'Ü', [rfReplaceAll]); Data := trim(StringReplace(Data, #$D, '', [rfReplaceAll])); Data:= StringReplace(Data, #129, 'ü', [rfReplaceAll]); Data := trim(StringReplace(Data, #132, 'ä', [rfReplaceAll])); Data := StringReplace(Data, #142, 'Ä', [rfReplaceAll]); Data := StringReplace(Data, #148, 'ö', [rfReplaceAll]); Data := StringReplace(Data, #153, 'Ö', [rfReplaceAll]); Data := StringReplace(Data, #154, 'Ü', [rfReplaceAll]); Data := StringReplace(Data, #10#13, ' ', [rfReplaceAll]);
ParserTreeView := TMyParserMB256plus.Create; Delay(2000);
ParserTreeView.Parse(Data); TreeViewResult(ParserTreeView); ParserTreeView.Free; Data := ''; end; I:=I-2; end; INC(I); end;
Buffer:=''; end; |
[EDIT] Setze ich ein Delay(3000), werden die Daten nach dem dritten Datensatz sauber eingetragen.
Achso, was nicht sein kann, ist das die Anlage so langsam liefert, weil in mein Memo wird sofort und sehr schnell geschrieben.
Hier die Funktion von Datenverarbeitung MB256 die in der Case Anweisung aufgerufen wird.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| procedure TForm1.DatenverarbeitungMB256; Var Datum :String; Jahr :String; Monat :String; Sicherung :String; SL :TStringList; I :Integer; IA :Integer; IB :Integer; IC :Integer; ID :Integer; N :Integer; begin Datum := DatetoStr(Date); Jahr := FormatDateTime('yyyy',strtodatetime(Datum)); Monat := FormatDateTime('mmmm',strtodatetime(Datum)); CreateDir('..\Daten\'); CreateDir('..\Daten\'+Jahr); CreateDir('..\Daten\'+Jahr+'\'+Monat);
sl := TStringList.Create; try MMUEZ2000.Lines.Add(Zeile); sl.AddStrings(MMUEZ2000.Lines); for i := 0 to sl.Count -1 do begin sl[i] := trim(StringReplace(sl[i], #$D, '', [rfReplaceAll])); sl[i] := StringReplace(sl[i], #129, 'ü', [rfReplaceAll]); sl[i] := trim(StringReplace(sl[i], #132, 'ä', [rfReplaceAll])); sl[i] := StringReplace(sl[i], #142, 'Ä', [rfReplaceAll]); sl[i] := StringReplace(sl[i], #148, 'ö', [rfReplaceAll]); sl[i] := StringReplace(sl[i], #153, 'Ö', [rfReplaceAll]); sl[i] := StringReplace(sl[i], #154, 'Ü', [rfReplaceAll]); sl[i] := StringReplace(sl[i], #10#13, ' ', [rfReplaceAll]);
if sl[i] <> '' then Zeile:=''; Memo.Lines.Append(SL[I]); Speichermemo.Lines.Append(SL[I]); end; MMUEZ2000.Clear; sl.Free; finally
end; Zeile:=''; Sicherung := ('..\Daten\'+Jahr+'\'+Monat+'\'+Datum+'.txt'); Speichermemo.Lines.SaveToFile(Sicherung); Label1.Caption := Sicherung; end; |
Einloggen, um Attachments anzusehen!
|
|
|