![]() |
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
@ Robert_G: Schönes Foto!
Hab aber bei mir noch ein paar Probleme Deinen Code einzubauen. Er meckert bei PosEx und Grind. Hier ist mein Ansatz, denke aber, dass diese komplett falsch ist:
Delphi-Quellcode:
unit MatGrind;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TForm1 = class(TForm) StringGrid1: TStringGrid; GroupBox1: TGroupBox; GroupBox2: TGroupBox; StringGrid2: TStringGrid; Button1: TButton; Button2: TButton; Button3: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); Var X, Y, ActPos, PrevPos : Integer; sl : TStrings; Begin If Not OpenDialog1.Execute Then Exit; sl := TStringList.Create; Try // Öffne Datei in StringList sl.LoadFromFile(OpenDialog1.FileName); // laufe durch die sl For Y := 0 To pred(sl.Count) Do Begin // Spalte 0 X := 0; PrevPos := 1; // suche das erste "," ActPos := PosEx(',', Sl[Y], PrevPos); // verlasse die Schleife wenn kein "," mehr gefunden wurde While ActPos > 0 Do Begin // schreibe in die Zelle den Text zwischen dem vorherigen "," und dem gefundenen "," Grid.Cells[X, Y] := Copy(sl[Y], PrevPos, (ActPos - PrevPos)); // Postion des letzten Kommas PrevPos := succ(ActPos); // suche das nächste "," ActPos := PosEx(',', Sl[Y], PrevPos); inc(X); End; // zum Schluss noch den Text ab dem zuletzt gefundenen Komma in die Zelle Grid.Cells[X, Y] := Copy(sl[Y], PrevPos, Length(sl[Y])); End; Finally // Freigeben der sl FreeAndNil(SL); End; End; procedure TForm1.Button2Click(Sender: TObject); Var X, Y : Integer; sl : TStrings; TempStr : String; Begin If Not SaveDialog1.Execute Then Exit; sl := TStringList.Create; Try With Grid Do For Y := 0 To pred(Grid.RowCount) Do Begin // Leeren des TempStr vor jeder Zeile TempStr := ''; For X := 0 To pred(Grid.ColCount) Do TempStr := TempStr + Trim(Cells[X, Y]) + ','; // Hinzufügen von TempStr zur sl // in der letzten Zeile muss das letzte Komma abgeschnitten werden If Y = pred(Grid.RowCount) Then sl.Add(Copy(TempStr, 1, Length(TempStr) - 1)) Else sl.Add(TempStr); End; // Speichern der StringList sl.SaveToFile(SaveDialog1.FileName); Finally // Freigeben der sl FreeAndNil(SL); End; End; end. |
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
Zitat:
|
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
Werd ich machen ...
|
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
Code:
Das hab ich gefunden. Nur wenn ich Deinen Code einbinde meckert Delphi wegen dem OpenDialog1. Wieso eigentlich?
Returns the index value of a substring.
Unit StrUtils Category string handling routines Delphi syntax: function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer; C++ syntax: extern PACKAGE int __fastcall PosEx(const AnsiString SubStr, const AnsiString S, unsigned Offset = 1); Description PosEx returns the index of SubStr in S, beginning the search at Offset. If Offset is 1 (default), PosEx is equivalent to Pos. PosEx returns 0 if SubStr is not found, if Offset is greater than the length of S, or if Offset is less than 1. |
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
Delphi-Quellcode:
Nun hab ich zwar keinen Fehler mehr, aber die Function ist ohne Function... Desweiteren musste ich die Load und Savefunctionen ausschalten. Irgendwie bekomme ich die Produce load/save_Grind nicht in mein Brain.
procedure TForm1.Button3Click(Sender: TObject);
begin Close; end; procedure TForm1.Button1Click(Sender: TObject); begin If Not OpenDialog1.Execute Then Exit; end; procedure TForm1.Button2Click(Sender: TObject); begin If Not SaveDialog1.Execute Then Exit; end; function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer; begin // end; Procedure load_Grid(Grid: TStringGrid); Var X, Y, ActPos, PrevPos : Integer; sl : TStrings; Begin //If Not OpenDialog1.Execute Then Exit; sl := TStringList.Create; Try // Öffne Datei in StringList //sl.LoadFromFile(OpenDialog1.FileName); // laufe durch die sl For Y := 0 To pred(sl.Count) Do Begin // Spalte 0 X := 0; PrevPos := 1; // suche das erste "," ActPos := PosEx(',', Sl[Y], PrevPos); // verlasse die Schleife wenn kein "," mehr gefunden wurde While ActPos > 0 Do Begin // schreibe in die Zelle den Text zwischen dem vorherigen "," und dem gefundenen "," Grid.Cells[X, Y] := Copy(sl[Y], PrevPos, (ActPos - PrevPos)); // Postion des letzten Kommas PrevPos := succ(ActPos); // suche das nächste "," ActPos := PosEx(',', Sl[Y], PrevPos); inc(X); End; // zum Schluss noch den Text ab dem zuletzt gefundenen Komma in die Zelle Grid.Cells[X, Y] := Copy(sl[Y], PrevPos, Length(sl[Y])); End; Finally // Freigeben der sl FreeAndNil(SL); End; End; Procedure save_Grid(Grid: TStringGrid); Var X, Y : Integer; sl : TStrings; TempStr : String; Begin //If Not SaveDialog1.Execute Then Exit; sl := TStringList.Create; Try With Grid Do For Y := 0 To pred(Grid.RowCount) Do Begin // Leeren des TempStr vor jeder Zeile TempStr := ''; For X := 0 To pred(Grid.ColCount) Do TempStr := TempStr + Trim(Cells[X, Y]) + ','; // Hinzufügen von TempStr zur sl // in der letzten Zeile muss das letzte Komma abgeschnitten werden If Y = pred(Grid.RowCount) Then sl.Add(Copy(TempStr, 1, Length(TempStr) - 1)) Else sl.Add(TempStr); End; // Speichern der StringList //sl.SaveToFile(SaveDialog1.FileName); Finally // Freigeben der sl FreeAndNil(SL); End; End; end. Kannst Du mir ein Bespiel posten? |
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
Delphi-Quellcode:
Die komplette Function hab ich jetzt gefunden. Nur wie bring ich load/save_Grind die Open/Save Dialoge bei?
function PosEx(Substr: string; S: string; P: Integer): Integer;
begin if P <= 0 then Result := 0 else Result := Pos(Substr, Copy(S, P, Length(S))); if Result <> 0 then Result := Result + P - 1; end; |
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
Indem du sie einfach auf's Form ziehst.
|
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
Liste der Anhänge anzeigen (Anzahl: 1)
K, nochmal von vorne.
So bin ich vorgegangen: Neue Application erstellt. Zwei groupboxes mit titel 'Intra Matrix:' und 'Inter Matrix:' erstellt. Dort hinein jeweils eine StringGrind. Fünf Buttons erstellt. Auf jeden doppelgeklickt. Zwei Open und zwei SaveDialoge auf die Form geklatscht. Diese mit den Save und Load Buttons verknüpft. Die anderen mit // dummies ausgestattet. PosEx Function in den Quellcode kopiert. Deinen Quellcode hineinkopiert. Resultat: Findet die Save und Load Dialoge nicht. Wenn ich die jeweiligen Zeilen in Deinem Code deactiviere kann ichs compilen. Kannst Du mir nun sagen, wo ich was falschgemacht habe? Weil irgendwie tut das ganze :wall: schon weh... |
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
Kannst du .rar oder .zip archive anhängen? Ich kriege von selbstentpackenden immer Ausschlag. :?
|
Re: DRPQMAT-Datei bearbeiten (TXT-Datei auslesen)
Liste der Anhänge anzeigen (Anzahl: 1)
Du brauchst nur einen SaveDialg & einen OpenDialog!
Ich habe sie bei mir einfach SaveDialog1 & OpenDialog1 genannt, du kannst doch den Code soweit anpassen, oder nicht? Edit: ich habe dir das Projekt angehängt. Falls du dich mit den beiden Dialogen nicht auskennst, schau dir mal im OI die Einstellungen Filter, FilterIndex & DefaultExt an (natürlich auch in der OH :wink: ). Schaden kann's nix... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz