AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

read und write

Ein Thema von EWeiss · begonnen am 30. Jun 2019 · letzter Beitrag vom 1. Jul 2019
Antwort Antwort
Seite 2 von 3     12 3      
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: read und write

  Alt 30. Jun 2019, 15:23
I := 0; // Fehlte Du hast mich nicht zu ende schreiben lassen hatte es zu früh abgeschickt da von Hand getippt. )

Zitat:
// <- das ist eine Textdatei File Count ist nicht die Zeilen Anzahl
Jo
btw.. Dein Grow auch nicht

Zitat:
Reset(f); // Fehlte
Ja nicht auf den Zeilenanfang gesetzt.

werde es nochmal testen Danke.

gruss

Geändert von EWeiss (30. Jun 2019 um 15:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: read und write

  Alt 30. Jun 2019, 15:32
btw.. Dein Grow auch nicht
Das ist ja auch nur dafür da, damit Du nicht für jede Zeile ein Setlength aufrufen musst.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: read und write

  Alt 30. Jun 2019, 15:54
Ich mache eine Kombination von beiden und gut ist.
Ist mir jetzt zu viel Arbeit die Zeilenlänge des Textes von Hand zu ermitteln.

so geht's und gut ist

Delphi-Quellcode:
function TPlayList.SaveM3UFile(Filename: String; clear: BOOL = false): Boolean;
var
  F: TextFile;
  Buffer: String;
  i: Integer;
  CheckM3U: BOOL;
  SList: TStringList;
begin
  Result := True;
  CheckM3U := false;
  try
    SList := TStringList.create;
    SList.LoadFromFile(Filename);
    if SList.Strings[0] = '#EXTM3Uthen
      CheckM3U := true;
    SList.Free;

    AssignFile(F, Filename);
    if (FileExists(Filename)) and (not Clear) then
    begin
      Append(F);
    end
    else
    if clear then
      Rewrite(F)
    else
    Rewrite(F);

    if not CheckM3U then
      Writeln(F, '#EXTM3U');

    for i := 0 to FFile.Count - 1 do
    begin
      Buffer := Format('#EXTINF:%s|%s|%s|%s', [FTime.Strings[i], FTitle.Strings[i],
        FArtist.Strings[i], FAlbum.Strings[i]]);
      Writeln(F, Buffer);
      Writeln(F, FFile.Strings[i]);
    end;
    CloseFile(F);
  except
    CloseFile(F);
    Result := False;
  end;

end;
gruss
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#14

AW: read und write

  Alt 30. Jun 2019, 16:20
Zitat:
Dein Fehler ist, dieses uralte Textfile API zu verwenden
Es hat seine gründe

Ich schreibe mit Win32Api mitteln und verwende nicht überall TStringList nur weil es bequemer ist.
Meine Anwendungen basieren auf NONVCL.. ja ich weis auch dort kann man TStringList verwenden.

Ich suche eine Lösung für Meine Anwendungsweise.
Es muss doch möglich sein während des Schreibens vorher\gleichzeitig zu prüfen ob der Eintrag in der Datei existiert.

Danke..

gruss
Manche Leute haben halt eine masochistische Ader . Wenn Du unbedingt bei Textfile bleiben willst mußt Du die Aufgabe in zwei separate Aktionen teilen: erst die Datei zum lesen öffnen, den gewünschten Teil lesen, die Datei wieder schließen und dann zum Schreiben wieder öffnen. Geht nicht anders.
Peter Below
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: read und write

  Alt 30. Jun 2019, 16:30
Zitat:
erst die Datei zum lesen öffnen, den gewünschten Teil lesen, die Datei wieder schließen und dann zum Schreiben wieder öffnen.
Mache ich ja siehe letzter Beitrag..
Delphi-Quellcode:
    SList := TStringList.create;
     SList.LoadFromFile(Filename); // öffnen
     if SList.Strings[0] = '#EXTM3Uthen // Bereich auslesen
       CheckM3U := true;
     SList.Free; // schließen

     AssignFile(F, Filename); // öffnen
oder..
Delphi-Quellcode:
    AssignFile(F, Filename); // öffnen
    Reset(F); // Zeilenanfang
    while not Eof(F) do
    begin
      ReadLn(F, Buffer);
      if Buffer = '#EXTM3Uthen // gefunden
      begin
        CheckM3U := true;
        break; // raus hier
      end;
    end;
    CloseFile(F); // schließen
ohne Array !!

gruss

Geändert von EWeiss (30. Jun 2019 um 16:40 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#16

AW: read und write

  Alt 30. Jun 2019, 16:37
Hier eine kleine Verbesserung basierend auf deinem Ansatz
Delphi-Quellcode:
 CheckM3U := False;
 if (FileExists(Filename)) then // LoadFromFile geht in die Hose, wenn die Datei nicht existiert
  begin
   SList := TStringList.Create;
   try
    SList.LoadFromFile(Filename);
  
    CheckM3U := SList.Text.StartsWith(#EXTM3U);
   finally
    SList.Free; // schließen
   end;

   AssignFile(F, Filename); // öffnen
   ...
  end;

Geändert von DieDolly (30. Jun 2019 um 17:54 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: read und write

  Alt 30. Jun 2019, 16:38
Danke.. habe meinen Beitrag nochmals editiert.
Denke so geht s
Auch ohne TStringList.

Zitat:
Manche Leute haben halt eine masochistische Ader
Du hast so recht.. schwer warm heute, von daher verzeih mir noch mal meine Herangehensweise.

gruss

Geändert von EWeiss (30. Jun 2019 um 16:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: read und write

  Alt 30. Jun 2019, 17:46
Mache ich ja siehe letzter Beitrag..
Delphi-Quellcode:
    SList := TStringList.create;
     SList.LoadFromFile(Filename); // öffnen
     if SList.Strings[0] = '#EXTM3Uthen // Bereich auslesen
       CheckM3U := true;
     SList.Free; // schließen

     AssignFile(F, Filename); // öffnen
ohne Array !!
Echt jetzt? Den ganzen File in Memory laden um festzustellen, ob in der 1. Zeile ein Token steht...
Und wenn es eh schon im Speicher ist, dann nicht die List ergänzen und SavetoFile…

omg... Ich gebe auf.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

AW: read und write

  Alt 30. Jun 2019, 17:54
Mache ich ja siehe letzter Beitrag..
Delphi-Quellcode:
    SList := TStringList.create;
     SList.LoadFromFile(Filename); // öffnen
     if SList.Strings[0] = '#EXTM3Uthen // Bereich auslesen
       CheckM3U := true;
     SList.Free; // schließen

     AssignFile(F, Filename); // öffnen
ohne Array !!
Echt jetzt? Den ganzen File in Memory laden um festzustellen, ob in der 1. Zeile ein Token steht...
Und wenn es eh schon im Speicher ist, dann nicht die List ergänzen und SavetoFile…

omg... Ich gebe auf.
Echt jetzt?
Liest du eigentlich auch was anderes als nur das was dir so gefällt?
Nochmal extra für dich!

Delphi-Quellcode:
    AssignFile(F, Filename); // öffnen
     Reset(F); // Zeilenanfang
     while not Eof(F) do
     begin
       ReadLn(F, Buffer);
       if Buffer = '#EXTM3Uthen // gefunden
       begin
         CheckM3U := true;
         break; // raus hier
       end;
     end;
     CloseFile(F); // schließen
Den Post hättest du dir gerne sparen können denn er war unnötig.
Möchtest du mich diffamieren oder was bezweckst du damit!
Ohne dein ominöses Array.. Sorry das musste jetzt sein.

Manchmal fällt einem nichts ein deshalb aber versuchen hier jemand zur Schau zu stellen ist auch nicht die feine Art.

Readln(F,Array[i]) Hier kracht es schon.. direkt nach dem öffnen.
Ich hoff Du hast es so nicht geschrieben...

sondern

Delphi-Quellcode:
Var
  S : TArray<String>;
Zeig mal den Code PLS
Nur eines der Beispiele. .Das du mich für so blöd hältst das ich mein Array so auslegen würde spricht schon für sich.
OK! Ist gut Thema erledigt.. Trotzdem Danke.

gruss

Geändert von EWeiss (30. Jun 2019 um 18:04 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#20

AW: read und write

  Alt 30. Jun 2019, 18:03
Echt jetzt? Den ganzen File in Memory laden um festzustellen, ob in der 1. Zeile ein Token steht...
Vielleicht so?
Delphi-Quellcode:
function IsM3UFile(const AFileName: string): BOOLEAN;
 var
  FileStream: TFileStream;
  LineBuffer: TBytes;
  Encoding: TEncoding;
  Line: string;
 begin
  Result := False;

  FileStream := TFileStream.Create(AFileName, fmOpenRead);
  try
   SetLength(LineBuffer, 7);
   FileStream.Read(LineBuffer[0], Length(LineBuffer));
   TEncoding.GetBufferEncoding(LineBuffer, Encoding);

   Result := Encoding.GetString(LineBuffer).StartsWith('#EXTM3U');
  finally
   FileStream.Free;
  end;
 end;


 B := IsM3UFile();
Kann man eventuell noch umschreiben, sodass #EXTM3U reingeschrieben wird, wenn es nicht existiert.

Geändert von DieDolly (30. Jun 2019 um 19:39 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 04:59 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