![]() |
Überschreiben
Hallo liebe Delphi-PRAXIS'ler,
ich habe mal wieder ein Problem: Ich möchte für ein Spiel eine Highscoreliste erstellen. Die Tabelle mit Rang, Name, Punkte ist eine Stringgrid. Nun impotiere ich bei der OnCreate-Anweisung die Werte aus einer .csv-Datei. Wenn ich das dann speichere bekomme ich eine Fehlermeldung, dass die Datei nicht erstellt werden kann. Ich denke, dass das daran liegt, dass ich die Datei ja geöffnet habe. Wie kann ich die Fehlermeldung umgehen und es richtig speichern? Hier der wichtige Teil des Quelltextes: Öffnen: Variablen: i:integer; sl: TStringList; zeilennr: integer; DateiName, S: String; F: TextFile;
Code:
Speichern:
for i:=1 to 10 do stringgrid1.Cells[0,i]:=inttostr(i);
DateiName :='Bestenliste.csv'; sl:=TStringList.Create; sl.Delimiter := ','; try AssignFile(F,'Bestenliste.csv'); Reset(F); zeilennr:=0; While not Eof(F) do begin Readln(F, S); sl.DelimitedText := s; Stringgrid1.Rows[zeilennr] := sl; inc(zeilennr); end; finally sl.free; end; Variablen: iRow: integer; sl: TStringList;
Code:
Danke für gegebene Antworten :thumb:
sl := TStringList.Create;
for iRow := 0 to StringGrid1.RowCount - 1 do sl.Add(StringGrid1.Rows[iRow].CommaText); sl.SaveToFile(ExtractFilePath(Application.ExeName)+'Bestenliste.csv'); sl.Free; Liebe Grüße loirad |
AW: Überschreiben
Eine StringListe besitzt dier Methode .LoadFromFile()
|
AW: Überschreiben
Ja aber das hilft mir doch nicht weiter oder? Ich muss ja trotzdem alles Zeile für Zeile übertragen oder?
|
AW: Überschreiben
Du könntest entweder mit 2 Stringlisten arbeiten oder zumindest auch mal CloseFile aufrufen.
|
AW: Überschreiben
@ DaddyH: CloseFile hat ausgereicht!
@ all: Danke für die Hilfe! Liebe Grüße loirad |
AW: Überschreiben
So macht man das seit Delphi 2 eigentlich.
Delphi-Quellcode:
Klar, man kann auch komplett auf die Vorteile von Delphi verzichten und so tun, als ob es keine netten vorgefertigten Klassen gibt.
Procedure TMyForm.LoadHighScore(aHighScoreFilename : String);
Var csv, csvRow : TStringList; i : Integer; Begin csv := TStringlist.Create; csvRow := TStringList.Create; Try csvRow.DelimiterChar := ';'; csv.LoadFromFile(aHighScoreFilename); For i := 0 To csv.Count - 1 do begin csvRow.DelimitedText := csv[i]; MyHighScoreStringGrid.Rows[i] := csvRow; End; Finally csvRow.Free; csv.Free; End; End; |
AW: Überschreiben
Über vorhandenen Objekte kann man sich noch mehr ersparen.
Delphi-Quellcode:
Procedure TForm1.LoadHighScore(aHighScoreFilename : String);
Var csv : TStringList; i : Integer; Begin csv := TStringlist.Create; Try csv.LoadFromFile(aHighScoreFilename); For i := 0 To csv.Count - 1 do begin StringGrid1.Rows[i].Delimiter := ';'; StringGrid1.Rows[i].DelimitedText := csv[i]; End; Finally csv.Free; End; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 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