.txt Datei in einen Stringgrid einfügen??
.txt Datei in einen Stringgrid einfügen??
hey,
ich möchte ein .txt datei mit Daten z.B.
X y z
1 3 4
1,4 3,2 5
2,1 33 44
einmal öffnen über opendialog und dann halt in einen stringgrid einfügen das x y z halt ihre eigene spalten haben mit den jeweiligen weiten in den zeilen.
gruß
foxi
ich möchte ein .txt datei mit Daten z.B.
X y z
1 3 4
1,4 3,2 5
2,1 33 44
einmal öffnen über opendialog und dann halt in einen stringgrid einfügen das x y z halt ihre eigene spalten haben mit den jeweiligen weiten in den zeilen.
gruß
foxi
Re: .txt Datei in einen Stringgrid einfügen??
dann mach das doch, woran scheitert's
hde
hde
Re: .txt Datei in einen Stringgrid einfügen??
nein es liegt daran das ich vor einer woche mit delphi angefangen und dann direkt auch zu lazarus gewechselt bin .. und ich keine ahnung habe .. =/
Re: .txt Datei in einen Stringgrid einfügen??
Sorry, aber ganz ohne Ahnung kann man nicht programmieren, weder mit Delphi noch mit Lazarus.
Lies dir ein Tutorial durch oder ein Handbuch ..
ein wenig Ahung von Pascal muss man schon haben
hde

Lies dir ein Tutorial durch oder ein Handbuch ..
ein wenig Ahung von Pascal muss man schon haben
hde
Re: .txt Datei in einen Stringgrid einfügen??
Wenns nicht unbedingt *.txt sein muss, geht das so: http://www.delphipraxis.net/7866-datei- ... ffnen.html (Stringgrid entsprechend)
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Lazarusforum e. V.
- Beiträge: 560
- Registriert: So 10. Sep 2006, 23:24
- OS, Lazarus, FPC: Linux Mint 22; Lazarus 4.0 FPC 3.2.2; RaspiOS
- CPU-Target: AMD 64, ARM 64
- Wohnort: nr Stuttgart
Re: .txt Datei in einen Stringgrid einfügen??
Hallo Foxi,
zunächst herzlich willkommen im Lazarusforum und viel Spaß und Erfolg beim erlernen der Programmiersprache Pascal und der Benutzeroberfläche Lazarus.
So erstmal ein bischen Kritik. Ich habe jetzt schon ein paar Deiner Beiträge gelesen und ich sehe Du gehörst zu den Zeitgenossen, die alles in Kleinbuchstaben, alles in einem Satz, ohne Satzzeichen und das und dass nicht unterscheiden können. Außerdem ist der Text nicht verständlich ausformuliert. Ich muss sagen, so einen Text zu lesen und erst recht zu verstehen fällt ungemein schwer. Du möchtest Hilfe vom Forum und mutest allen Lesern Deinen Text zu.
Ich möchte jetzt nicht eine Diskussion über "saubere" Texte vom Zaun brechen, also bitte zu diesem Thema keine zusätzliche Komentare.
So nun zu Deinem Problem.
Lade Deinen Text-File in eine StringListe.
Mit der StringList-Methode DelimitedText kannst du jede Zeile zerlegen und dann in die Zellen des StringGrids kopieren.
Viel Erfolg.
Gruß,
Linkat
zunächst herzlich willkommen im Lazarusforum und viel Spaß und Erfolg beim erlernen der Programmiersprache Pascal und der Benutzeroberfläche Lazarus.
So erstmal ein bischen Kritik. Ich habe jetzt schon ein paar Deiner Beiträge gelesen und ich sehe Du gehörst zu den Zeitgenossen, die alles in Kleinbuchstaben, alles in einem Satz, ohne Satzzeichen und das und dass nicht unterscheiden können. Außerdem ist der Text nicht verständlich ausformuliert. Ich muss sagen, so einen Text zu lesen und erst recht zu verstehen fällt ungemein schwer. Du möchtest Hilfe vom Forum und mutest allen Lesern Deinen Text zu.
Ich möchte jetzt nicht eine Diskussion über "saubere" Texte vom Zaun brechen, also bitte zu diesem Thema keine zusätzliche Komentare.
So nun zu Deinem Problem.
Lade Deinen Text-File in eine StringListe.
Code: Alles auswählen
StringListe.LoadFromFile('text.txt');
Viel Erfolg.
Gruß,
Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
Re: .txt Datei in einen Stringgrid einfügen??
@Linkat: Werde versuchen ab jetzt ordentlicher zu schreiben.
Ok, so etwas kapiert habe ich Lazarus ja schon dadurch das ich mir Tutorials angesehen habe.
Ich bekomme es auch ohne Probleme hin die .txt Datei in einem Memo zu öffnen.
Aber das mit StringGrid bzw Matizen kapiere ich einfach gar nicht.
StringL ist ja in diesem Video etwas erklärt http://www.youtube.com/watch?v=Ys60OVxtpYk.
Alle Versuche die ich unternommen habe enden darin das nur zwei wörter im StringGrid sind oder nur in der ersten Zeile.
Gruß,
Foxi
Ok, so etwas kapiert habe ich Lazarus ja schon dadurch das ich mir Tutorials angesehen habe.
Ich bekomme es auch ohne Probleme hin die .txt Datei in einem Memo zu öffnen.
Aber das mit StringGrid bzw Matizen kapiere ich einfach gar nicht.
StringL ist ja in diesem Video etwas erklärt http://www.youtube.com/watch?v=Ys60OVxtpYk.
Alle Versuche die ich unternommen habe enden darin das nur zwei wörter im StringGrid sind oder nur in der ersten Zeile.
Gruß,
Foxi
Re: .txt Datei in einen Stringgrid einfügen??
Es ist meist sinnvoll wenn man zeigt was man versucht hat und sagt wo es klemmt.
Re: .txt Datei in einen Stringgrid einfügen??
Hier ist das, was bisher am Erfolgreichsten aussah... nur es ist übernommen von irgendeiner Seite (hab schon einige durchgeschaut) und angepasst.
Was mich halt stört das es hier halt vom Memo zum StringGrid geht und ich möchte es gerne direkt reingeladen haben. (Außerdem ist alles in der ersten Spalte =/)
Also wo es genau Klemmt ist der Anfang/ Ansatz.
Muss ja glaube erst eine Matrix erstellen fürs StringGrid damit es weiß wie groß und wohin, ka?
Code: Alles auswählen
procedure TForm1.MenuItem5Click(Sender: TObject);
begin
if Form1.OpenDialog1.Execute then
begin
if FileExists(Form1.OpenDialog1.Filename) = TRUE then
begin
Form1.Memo1.Lines.LoadFromFile(Form1.OpenDialog1.Filename);
end;
end;
end;
function ParseStr(var s: string; delimiters: string; purge: boolean = true): string;
var
i: integer;
begin
i := 0;
while (i < Length(s)) and (Pos(s[Succ(i)], delimiters) = 0) do
Inc(i);
Result := Copy(s, 1, i);
Delete(s, 1, i + Ord(purge));
end;
procedure ExtractFields(s, delimiters: string; sl: TStrings);
var
t: string;
begin
sl.Clear;
while s <> '' do begin
t := ParseStr(s, delimiters, true);
if t <> '' then
sl.Add(t);
end;
end;
procedure TForm1.MenuItem6Click(Sender: TObject);
var
i: integer;
begin
StringGrid1.RowCount := Memo1.Lines.Count;
for i := 0 to Pred(Memo1.Lines.Count) do
ExtractFields(Memo1.Lines[i], ';', StringGrid1.Rows[i]);
end;
Also wo es genau Klemmt ist der Anfang/ Ansatz.
Muss ja glaube erst eine Matrix erstellen fürs StringGrid damit es weiß wie groß und wohin, ka?
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: .txt Datei in einen Stringgrid einfügen??
Mach doch selber so z.B.:
Ich habe die Prozeudur gleich hier geschrieben, es musste funktionieren.
Code: Alles auswählen
procedure LadeDatei(ADateiName: string; AGrid: TStringGrid);
var c,r,i,k :integer;
aList : TStringList;
aLine, aWort : string;
begin
aList := TStringList.Create;
try
aList.LoadFromFile(ADateiName);
//erst grid leeren
for r:=0 to AGrid.RowCount-1 do
for c:=0 to AGrid.ColCount-1 do
AGrid.Cells[c,r]:='';
r:=-1;
for k:=0 to AList.Count-1 do begin //Stringlist Zeilen durchlaufen
Inc(r); //zeilennr in Grid erhöhen
if r>=AGrid.RowCount then AGrid.RowCount:=r+1;
c:=0; //erste spalte
aLine:=aList[k];
aWort:=''
for i:=1 to Length(aLine) do begin //Zeichen einer Zeile durchlaufen
case aLine[i] of
' ': begin //Trennzeichen (Leerzeichen) erreicht Wert zum Grid
if c>=AGrid.ColCount then AGrid.ColCount:=c+1;
AGrid.Cells[c,r]:=aWort;
aWort:='';
Inc(c);
end;
else aWort:=aWort+aLine[i];
end; //von case ...
end; //von for i:= ...
//und lezte Zahl zum Grid. "For i:=0" wurde beendet weil Zeilenende erreicht aber es kann noch ein Zahl vorhanden sein.
if aWort<>'' then begin
if c>=AGrid.ColCount then AGrid.ColCount:=c+1;
AGrid.Cells[c,r]:=aWort;
end;
end; //von for k:=0 ....
finally
aList.Free;
end;
end;
Re: .txt Datei in einen Stringgrid einfügen??
Was muss ich jetzt machen um das zu Starten?
Also compilieren tut es. Ohne Fehler aber wie öffne ich jetzt die Datei?
Habe ein ButtonClick vor gemacht aber dann geht wieder nix =/
Also compilieren tut es. Ohne Fehler aber wie öffne ich jetzt die Datei?
Habe ein ButtonClick vor gemacht aber dann geht wieder nix =/
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: .txt Datei in einen Stringgrid einfügen??
Ist doch einfach, In dein "procedure TForm1.MenuItem5Click(Sender: TObject);":Foxi1896 hat geschrieben:Was muss ich jetzt machen um das zu Starten?
Also compilieren tut es. Ohne Fehler aber wie öffne ich jetzt die Datei?
Habe ein ButtonClick vor gemacht aber dann geht wieder nix =/
Code: Alles auswählen
procedure TForm1.MenuItem5Click(Sender: TObject);
begin
if Form1.OpenDialog1.Execute then begin
if FileExists(Form1.OpenDialog1.Filename) = TRUE then begin
//Form1.Memo1.Lines.LoadFromFile(Form1.OpenDialog1.Filename);
// HIER =====================================================
LadeDatei(Form1.OpenDialog1.Filename, StringGrid1);
end;
end;
end;
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: .txt Datei in einen Stringgrid einfügen??
Ich habe von mir erstelle Procedur getestet es funktioniert wunderbar. Ich habe ein paar Zeilen hinzugefügt damit Zeilen und Spaltenanzahl korregiert wird.
Hier ist neue Version:
Hier ist neue Version:
Code: Alles auswählen
procedure LadeDatei(ADateiName: string; AGrid: TStringGrid);
var c,r,i,k, maxc :integer; //maxc ist neu
aList : TStringList;
aLine, aWort : string;
begin
aList := TStringList.Create;
try
aList.LoadFromFile(ADateiName);
//erst grid leeren
for r:=0 to AGrid.RowCount-1 do
for c:=0 to AGrid.ColCount-1 do
AGrid.Cells[c,r]:='';
r:=-1;
maxc:=0; //neu
for k:=0 to AList.Count-1 do begin //Stringlist Zeilen durchlaufen
Inc(r); //zeilennr in Grid erhöhen
if r>=AGrid.RowCount then AGrid.RowCount:=r+1;
c:=0; //erste spalte
aLine:=aList[k];
aWort:='';
for i:=1 to Length(aLine) do begin //Zeichen einer Zeile durchlaufen
case aLine[i] of
' ': begin //Trennzeichen (Leerzeichen) erreicht Wert zum Grid
if c>=AGrid.ColCount then AGrid.ColCount:=c+1;
AGrid.Cells[c,r]:=aWort;
aWort:='';
Inc(c);
end;
else aWort:=aWort+aLine[i];
end; //von case ...
end; //von for i:= ...
//und lezte Zahl zum Grid. "For i:=0" wurde beendet weil Zeilenende erreicht aber es kann noch ein Zahl vorhanden sein.
if aWort<>'' then begin
if c>=AGrid.ColCount then AGrid.ColCount:=c+1;
AGrid.Cells[c,r]:=aWort;
end;
if c>maxc then maxc:=c; //neu
end; //von for k:=0 ....
finally
aList.Free;
end;
if maxc>0 then AGrid.ColCount:=maxc+1; //neu
if r>0 then AGrid.RowCount:=r+1; //neu
end;
Re: .txt Datei in einen Stringgrid einfügen??
=/ hmm bei mir kommt immer Error: Identifier not found "LadeDatei"
Re: .txt Datei in einen Stringgrid einfügen??
Dann hast du dich wahrscheinlich verschrieben! Wenn die Procedure "LadeDatei" heisst und du diese in deine Unit (wahrscheinlich Unit1) eingefügt hast, dann kannst du sie auch mitteils "LadeDatei(..)" aufrufen!
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;