AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Textdatei laden - Integerüberlauf

Textdatei laden - Integerüberlauf

Ein Thema von KWin · begonnen am 15. Jul 2020 · letzter Beitrag vom 16. Jul 2020
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Textdatei laden - Integerüberlauf

  Alt 15. Jul 2020, 22:23
Der 64 Bit-Debugger wird, wie der externe RemoteDebugger, über eine lokale TCP/IP-Verbindung angesprochen ... schau mal ob rmtdbg270.exe lokal freigegeben ist.


So, ansonsten du hast Pech.
Im SaveToFile wird erst alles in einen String kopiert
und strings können maximal 2 GB groß werden.

Bei DynArrays ist Length als NativeInt deklariert, aber bei den LongStrings (z.B. String/UnicodeString) nur als Integer.

TStrings.SaveToStream: erst über TStrings.GetTextStr und dann durch TEncoding.GetBytes in ein Byte-Array, welcher in den Stream kopiert wird
und der String ist hier die Limitierung.
Beim LoadFromFile andersrum.


Du darfst gern eine TStringList benutzen, aber nur für Dateien unter 1 GB,
oder du implementierts die Lade-/Speichernfunktion selbst.

Oder machst es eben "richtig".
Zitat:
Das "richtige" Verfahren ist aber nicht ALLEs zu laden, sondern solche großen Dateien nur stückchenweise in mehreren Blöcke á einigen KB/MB aufgeteilt zu laden und nacheinander zu behandeln.
Sieh dir HxD an, da hast ein Beispiel dass man auch kleine Terrabytedateien laden kann.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Jul 2020 um 22:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.307 Beiträge
 
Delphi 12 Athens
 
#2

AW: Textdatei laden - Integerüberlauf

  Alt 16. Jul 2020, 09:26
Oder machst es eben "richtig".
Definiere "richtig".

Der TE hat nicht geschrieben, was er mit der Textdatei machen möchte.

Wenn zur Auswertung der Textdatei wahllos zwischen den Zeilen hin und her gesprungen werden muss, dann bleibt nichts anderes übrig, als die Datei komplett einzulesen. Ausser die Textdatei hat eine feste Zeilenlänge. Aber auch das weist du nicht.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Bbommel

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

AW: Textdatei laden - Integerüberlauf

  Alt 16. Jul 2020, 09:33
Der TE hat doch schon längst geschrieben, dass er große Dateien jetzt zeilenweise per StreamReader einliest.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Textdatei laden - Integerüberlauf

  Alt 16. Jul 2020, 13:24
Zitat:
Wenn zur Auswertung der Textdatei wahllos zwischen den Zeilen hin und her gesprungen werden muss, dann bleibt nichts anderes übrig, als die Datei komplett einzulesen.
In den dem Fall würde ich die Datei eher in den Speicher mappen, anstatt reinzuladen,
da hier der FileCache von Windows ins Spiel kommt und diese Datei nicht "komplett" im RAM/Auslagerungsdatei abgelegt wird.
MemoryMappedFiles

Bei sequentiell ist ein StreamReader aber bestimmt einfacher.

Wobei, bei der MMF kann man da den Anfang und Ende als PAnsiChar/PWideChar casten und kann gemütlich dazwischen durch den Arbeistspeicher hüpfen, während sich Windows um das Laden kümmert (bzw. Entladen, wenn freier RAM benötigt wird).
z.B. der Code oder die Ressourcen von EXE und DLL sind ebenso in den Speicher gemappt, so dass es nicht in die Auslagerungsdatei muß, da es von der Platte geladen und notfalls entladen werden kann. Abgesehn davon wo Code/Speicher/Adressen angepasst wurden, dann wird der Teil von der Datei entkoppelt (CopyOnWrite) und bleibt im RAM/Auslagerungsdatei.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Jul 2020 um 13:29 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Textdatei laden - Integerüberlauf

  Alt 16. Jul 2020, 18:11
Hallo,
wenn das SaveToFile nicht klappt,
dann schreib es per AssignFile, WriteLn (Typ: Text) usw.;
Heiko
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
772 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Textdatei laden - Integerüberlauf

  Alt 16. Jul 2020, 19:02
Hallo in die Runde... nur kurz: Ich will gar nicht viele Elemente einer TStringlist speichern. Es war nur eine Bemerkung, dass sowohl das Laden via loadfromfile (ursprüngliches Thema des Threads) wie eben auch das Speichern via savetofile nicht klappt. Grund ist klar (siehe oben).

[ Danke himitsu für deinen 64Bit Win Debugger Firewall Tipp (Einstellung war und ist OK) - wenn ich keine Lösung finde, dann muss ich wohl mal ein neues Thema eröffnen. ]
Michael Gasser
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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