Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Do 06.09.12 19:22 
Ein freundliches Hallo an alle,

leider habe ich wenig Unterlagen zu Delphi 4. Daher folgende Frage:

ich öffne eine Seuerdatei mit TFileStream, weil ich sie exclusiv zum lesen und schreiben öffnen möchte, damit es bei Änderungen im Netzwerk keine Konflikte gibt. Da es sich umeine kleine Datei handelt kann ich sie vollständig einlesen und habe in einer PChar-Variablen alle Zeilen. Es wäre nun schön, wenn ich nicht alle Zeilen selbst auseinander pulen müsste, sondern das durch convertieren oder zuweisen als Stringliste hätte. In der Hilfe habe ich nichts passendes gefunden, auch nicht im Forum.

Ich hoffe jemand hat einem Tipp.

Grüße von der Nordsee

Peter
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 06.09.12 19:43 
Hallo,

TStringList hat eine Methode LoadFromStream().
Meinst du das?

Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1448

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Do 06.09.12 19:47 
Hallo,
user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
Es wäre nun schön, wenn ich nicht alle Zeilen selbst auseinander pulen müsste, sondern das durch convertieren oder zuweisen als Stringliste hätte.

vielleicht habe ich Dich nicht richtig verstanden, aber warum lädst Du Deine Datei nicht sofort in die Stringliste:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var liste:tstringlist;
begin
    liste:=tstringlist.create;
    liste.loadfromfile('Dateiname');

    // Bearbeiten 

    liste.savetofile('Dateiname');  // und zurückschreiben
    liste.free;
end;

Die einzelnen Einträge findest Du dann unter liste[0] bis liste[liste.count-1].
Oder gibt es da Konflikte im Netzwerk?
Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Fr 07.09.12 00:45 
Hallo Mathematiker, hallo Martok,

danke für eure Antwort. Ich kene diese Möglichkeit, doch dort kann ich, wie es aussieht, nicht exklusiv zum lesen und schreiben öffnen, um Konflikte im Netzwerk zu vermeiden. Mit "liste.loadfromfile" würde ich die Datei nur lesen und später schreiben. In der Zwischenzeit könnte sie von einem (theoretisch und selten auch praktisch) Anderen inzwischen geändertworden sein!

Diese Methoden wären natürlich schöner, aber Änderungen sollten sicher programmiert sein, vor allem im Netzwerk! :wink:

Grüße von der Nordsee

Peter
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 07.09.12 01:13 
Moin,

es hat schon einen Grund, dass ich LoadFromStream erwähnte ;-)
Du erzeugst deinen Stream wie bisher auch und lässt diesen die ganze Zeit offen. In der Zwischenzeit kannst du mit der StringList rumfummeln und schreibst hinterher die Änderungen wieder weg.

Im Editor getippt, sowas in der Art (nur natürlich in ordentlich :zwinker: ) meine ich:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
//Datei öffnen
Stream:= TFilestream.Create('\\foo\bar\file.txt',fmOpenWrite or fmShareExclusive);
List:= TStringList.Create;
//einlesen
List.LoadFromStream(Stream);
//ändern
List.Add('blubb');
//datei leeren
Stream.Position:= 0;
Stream.Size:= 0;
//zurückschreiben
List.SaveToStream(Stream);
//datei schließen
Stream.Free;


Wobei du beachten solltest, dass TFileStream etwas kaputt ist und kein Open-Or-Create kann. Aber das ist ja hier nicht die Frage gewesen :roll:

Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."