AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi SCHNELL: Erste 100 Zeichen aus Textdatei lesen
Thema durchsuchen
Ansicht
Themen-Optionen

SCHNELL: Erste 100 Zeichen aus Textdatei lesen

Ein Thema von PeterPanino · begonnen am 23. Okt 2012 · letzter Beitrag vom 25. Okt 2012
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: SCHNELL: Erste 100 Zeichen aus Textdatei lesen

  Alt 24. Okt 2012, 22:32
Ohne Kopieren in Zwischenpuffer:
Delphi-Quellcode:
function GetStartBlockFromTextFile(const F: string; const X: Integer): AnsiString;
// holt die ersten X Zeichen aus der Text-Datei F
var
  SR : TStreamReader;
  len : Integer;
begin
  SR := TStreamReader.Create(F);
  try
    SetLength(Result, X);
    len := SR.ReadBlock(Result, 0, X);
    // evtl. in len < X, dann wird der String entsprechend verkürzt
    SetLength(Result, len);
  finally
    SR.Free;
  end;
end;
Das lässt der Compiler nicht zu, da ReadBlock im ersten Parameter ein Char-Array erwartet, Result aber als AnsiString deklariert ist. Wie kann man das type-casten?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: SCHNELL: Erste 100 Zeichen aus Textdatei lesen

  Alt 24. Okt 2012, 22:39
Wie kann man das type-casten?
Casten garnicht.



z.B. Delphi-Referenz durchsuchenTEncoding

Oder, wenn die internen Daten bitkompatibel sind, dann "kopieren" (Move)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: SCHNELL: Erste 100 Zeichen aus Textdatei lesen

  Alt 24. Okt 2012, 22:54
Ich erkenne leider nicht, wie man in dem obigen Beispiel mit TEncoding einen AnsiString in ein Char-Array umwandeln kann. Es geht ja darum, dass ReadBlock ein Char-Array erwartet, als Parameter aber nur ein AnsiString zur Verfügung steht.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: SCHNELL: Erste 100 Zeichen aus Textdatei lesen

  Alt 24. Okt 2012, 23:11
Hast du dir meine Variante angeschaut?
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: SCHNELL: Erste 100 Zeichen aus Textdatei lesen

  Alt 24. Okt 2012, 23:12
was Shima meinte war wohl

len := SR.ReadBlock(@Result[1], 0, X); Ich hatte eine identische Antwort fertig, habe sie aber nicht abgeschickt, da es bei mir nicht zuverlässig zum laufen kam, war abhängig vom Encoding der Datei und seltsamerweise auch vom Inhalt, irgendetwas an TStreamreader ist da etwas Voodoo.
Willst Du einen Binärvergleich fahren oder geht es nur um Textdateien (in einheitlicher Codierung) ?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.472 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: SCHNELL: Erste 100 Zeichen aus Textdatei lesen

  Alt 24. Okt 2012, 23:39
was Shima meinte war wohl

len := SR.ReadBlock(@Result[1], 0, X); Ich hatte eine identische Antwort fertig, habe sie aber nicht abgeschickt, da es bei mir nicht zuverlässig zum laufen kam, war abhängig vom Encoding der Datei und seltsamerweise auch vom Inhalt, irgendetwas an TStreamreader ist da etwas Voodoo.
Willst Du einen Binärvergleich fahren oder geht es nur um Textdateien (in einheitlicher Codierung) ?
Es geht nur um Textdateien, aber das Encoding kann je nach Anwendersystem wohl unterschiedlich sein. Ich werde mich deshalb nicht mit TStreamReader Voodoo herumschlagen, sondern mal die Variante von Aphton ausprobieren. Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: SCHNELL: Erste 100 Zeichen aus Textdatei lesen

  Alt 25. Okt 2012, 12:04
OK Leute...

OLD SCHOOL

Delphi-Quellcode:
Procedure Schnell;
Var
  Buffer : array[0..99] of byte;
  F : file;
  gelesen : Integer;
begin
  AssignFile(F,'Cool.txt');
  reset(F,1);
  Blockread(F,Buffer[0]),100,gelesen);
  Closefile(F);
  if gelesen = 100 then
   begin
     bla;
   end;
end;
Würde sagen NIX ist schneller!

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: SCHNELL: Erste 100 Zeichen aus Textdatei lesen

  Alt 25. Okt 2012, 12:31
Naja auch wenn ich diese Lösung (mit Stream) bevorzugen würde, so ganz richtig wäre sie nicht.
Die Aufgabenstellung lautet die ersten 100 Zeichen, und das sind unter XE ja wohl 16Bit Chars also ein buffer : array[0..199] of Byte; beim Auslesen müßte dann bestimmt werden ob es sich um eine 8 oder 16 Bit -Codierung handelt.
Aus den ersten 100 Zeichen im Ergebnis einen String zu machen, kann ja funktionieren aber ist auf jeden Fall riskant.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


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:03 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