AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Auf den letzten char in einer Datei zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Auf den letzten char in einer Datei zugreifen

Ein Thema von kagi3624 · begonnen am 18. Feb 2020 · letzter Beitrag vom 19. Feb 2020
Antwort Antwort
Seite 2 von 4     12 34      
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
485 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 11:58
Hallo, unfreiwilliger Delphi 6 User hier
Wieso das? Es gibt doch mittlerweile die Community Edition...

wie kann ich auf den letzten Char in der Textdatei zugreifen um den eventuell zu löschen? Hintergrund: Ich schreibe in eine CSV Einträge und möchte das letzte Komma einfach löschen, ohne dass es in den EOF zugreift oder mir sonstwie um die Ohren fliegt.
Entweder über eine TStringList, oder über einen TFileStream, oder über die (veralteten) TextFile-Routinen.
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#12

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 12:08
Bei der StringListe aufpassen, dass es nicht knallt, sollte die Datei leer sein und einfach so ohne Prüfung auf Count-1 zugegriffen werden,
bzw. das letzte Char, wenn es nichts in der Zeile gibt.

PS: TStringList hängt beim Speichern einen Zeilenumbruch hinter jede Zeile, selbst wenn es beim Einlesen hinter der letzten Zeile keinen Zeilenumbruch gab.


CreateFile, SetFilePointer, ReadFile, MSDN-Library durchsuchenSetEndOfFile, CloseHandle
oder
Delphi-Quellcode:
S := TFileStream.Create(...);
//S.Position := S.Size - 1;
//if AnsiChar(S.Read(..., 1)) = ',' then
S.Size := S.Size - 1;
S.Free;
CreateFile/TFileStream knallt nichts, außer du willst es.
Ein Read/SetPosition hinter das Ende wird auf das Ende zurückgesetzt, bzw. stoppt dort.
Einige Read-Methoden (die ohne Result), werfen eine Exception, wenn sie nicht genug lesen/schreiben konnten und die mit Result sagen dir wieviel sie wirklich gemacht hatten (wenn du nicht vergisst die Results auszuwerten).
Read/Write vs. ReadBuffer/WriteBuffer
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Feb 2020 um 12:10 Uhr)
  Mit Zitat antworten Zitat
kagi3624

Registriert seit: 3. Feb 2020
138 Beiträge
 
Delphi 6 Enterprise
 
#13

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 13:35
@Moombas: Und warum nicht Delete?
War mir jetzt zu einfach ^^ ... klar kann man auch

Delete(sl.Strings[Liste.Count-1], length(sl.Strings[Liste.Count-1]) - 1, 1);
nehmen^^
Was ist denn 'Liste.count'..wo kommt das her?
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
655 Beiträge
 
Delphi 12 Athens
 
#14

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 13:49
Zitat:
Was ist denn 'Liste.count'..wo kommt das her?
Das soll wohl sl.Count heißen. Also die Anzahl der Elemente (=Anzahl der Zeilen) in der Stringliste sl. Die Anweisung soll in der letzten Zeile das letzte Zeichen löschen.


Zitat:
Delphi (6?) behandelt ja auch nicht initialisierte Objekte als schon vorhandene Objekte und reicht die dann auch feucht fröhlich an andere Funktionen usw weiter.
Ist zwar etwas von der eigentlichen Frage weg, aber dennoch kurz der Hiwneis, damit aus deinem Frust nicht komplette Abneigung wird: eigentlich gibt es bei Delphi Compiler-Warnungen, wenn du auf Variablen (Objekte oder sonst etwas) lesend zugreifst, bevor sie initailisiert wurden. Wenn das nicht der Fall ist, dann ist ggf. im Code noch etwas anderes nicht in Ordnung oder die Warnungen sind ausgeschaltet. Kannst ja bei Interesse mal einen neuen Thread zu dem Thema aufmachen, wenn du Hilfe brauchst herauszufinden, warum es keine Warnung gab.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#15

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 13:58
Sorry, Bbommel hat recht, das war ein Copy/Paste Fehler.

So wäre es richtig bzw. Luckie hat ja auch schon die Anwendung von Delete gepostet.
Delete(sl.Strings[sl.Count-1], length(sl.Strings[sl.Count-1]) - 1, 1);
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
kagi3624

Registriert seit: 3. Feb 2020
138 Beiträge
 
Delphi 6 Enterprise
 
#16

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 14:05
Sorry, Bbommel hat recht, das war ein Copy/Paste Fehler.

So wäre es richtig bzw. Luckie hat ja auch schon die Anwendung von Delete gepostet.
Delete(sl.Strings[sl.Count-1], length(sl.Strings[sl.Count-1]) - 1, 1);
Ich bekomme aber folgenden Fehler bei dieser Zeile...

[Fehler] FRMMAIN.pas(3782): Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 14:24
Delphi-Quellcode:
var
  sl: TStringList;
  s: String;
Beginn
  // ...;
  s := sl.Text;
  Delete(s, 0, length(s)-1);
  sl.Text := s;
  sl.SaveToFile;
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (18. Feb 2020 um 14:37 Uhr)
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
76 Beiträge
 
Delphi 10.1 Berlin Professional
 
#18

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 14:27
Sorry, Bbommel hat recht, das war ein Copy/Paste Fehler.

So wäre es richtig bzw. Luckie hat ja auch schon die Anwendung von Delete gepostet.
Delete(sl.Strings[sl.Count-1], length(sl.Strings[sl.Count-1]) - 1, 1);
Ich bekomme aber folgenden Fehler bei dieser Zeile...

[Fehler] FRMMAIN.pas(3782): Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
Einfach den Zwischenschritt über eine Variable gehen.

Delphi-Quellcode:
var
  s: string;
begin
  s := sl.Strings[sl.Count-1];
  s := Trim(s);
  Delete(s, length(s), 1);
  sl.Strings[sl.Count-1] := s;
end;

Geändert von DasWolf (18. Feb 2020 um 14:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 14:39
Das trim ist eine gute Idee.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
kagi3624

Registriert seit: 3. Feb 2020
138 Beiträge
 
Delphi 6 Enterprise
 
#20

AW: Auf den letzten char in einer Datei zugreifen

  Alt 18. Feb 2020, 14:54
Habe das jetzt über TFileStream gelöst. Ich kann meinen Kopf nicht über die Tatsache wickeln warum bei dem String der Index mit 1 und nicht 0, so wie sonst, anfängt.

Code:
procedure exportToCSV(Eintrag : string);
var
  strm : TFileStream;
  n : longint;
begin
  strm := TFileStream.Create('file.csv',fmCreate);
  n := Length(Eintrag);
  try
    strm.Position := 0;
    strm.Write(Eintrag[1], n);
    strm.Size := strm.Size - 1;
  finally
    strm.Free();
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz