Hallo Alex,
beim Versuch eine Frage aus dem Textbrett:
/t/nicht-textverarbeitung-aber-massentext/5682525
zu lösen kommt bei folgendem Word2000-Vba-Code Fehler 7, nicht
genügend Speicher in der Put-zeile.Welches OS liegt denn vor? Wie viel Arbeitsspeicher steht denn
zur Verfügung und ist frei?
k.A., ich gehe von irgendeinem Windows aus.
Jedes Zeichen belegt 2 Byte! Das wiederrum bedeutet bei einer
Länge von 2GB = 4GB Speicherplatz!
Nein, in dem Fall nicht.
Im unten nachfolgenden Code wird bei f.size 200000000, also 200 Millionen Bytes angezeigt.
Explorer zeigt 195313 KB an. Was wohl richtig ist wegen 200000000/1024=195312,5.
(Ich habe 200 MB genommen weil mir 2 GB zum Testen zu lange laufen, mal weglassend daß es sich um MiBi und GiBi handelt *gg*)
Jetzt kann ich zwar die Länge von „Satz“ verringern bis kein
Fehler mehr kommt, das nützt mir aber nix, da ja der Anfrager
als Ergebnis eine bis zu 2 GB große Textdatei möchte.Ja aber was spricht dagegen es in kleine haeppchen zu
schnippeln und diese dann zu schreiben?
Mußte ich notgedrungen machen, siehe Code.
Am besten noch mit Zufallszeichen drin.
Sollte kein Problem sein
Nein, nur ein Zeitproblem.
Habt ihr Ideen wie man das angehen könnte?
In einer Routine erstmal den Höchstmöglichsten Wert ermitteln,
und dann in einer Schleife einfach den String mit
Zufallswerten befuellen und dann ins File schreiben.
Okay, die Ermittlung des Höchstwertes hat mir zu lang gedauert
, ich hab einfach mal im Code 100 Millionen genommen als Häppchengröße genommen.
Ich kann zwar die neue Datei mit „For Input“ öffnen und dann
rel. kleine Sätze nacheinander reinschreiben mit „Print“, aber
bei 2 GB glaube ich daß dies lange dauert.Denke ich nicht! Das waeren rein aus dem Bauch herraus und je
nach Rechner und OS system vlt. 2 bis 3 Durchlaeufe, was sich
ergo unter 2 Sekunden realisieren laesst.
Bei mir WinXP, Pentium® 4 mit 1,7Ghz, 512 MB RAM, braucht mein Code aber schon gefühlte 3 Minuten für eine Datei von 200 Mio Bytes.
Noch dazu ohne Zufallszeichen.
Aus dem zeitgrund habe ich dem Anfrager abgeraten von
Zufallszeichen, das dauert ja noch viel länger als nur ein
Zeichen.Richtig. Stellt sich hier aber die Frage. Was will er mit dem
File ? Muessen es bindend zufallszeichen sein ? Würde auch der
Datentyp Byte gehen ?
k.A. sehr aktiv ist er in der beitragsfolge nicht grad *gg*
Kompromiß wäre, „zufällig“ eine x Bytes lange Zeichenfolge zu
erzeugen und die dann zigmal nacheinander in die datei
schreiben.Richtig, oder halt die Daten als Bytes schreiben. Sprich 0
oder 1Das würde m.E schneller gehen!
0,1? Bytes, Bits, komme grad durcheinander 
Ich probiere mal fix was
und meld mich dann wieder.
By the Way … Schau mal hier
„fix“ *hüstel* *lächel*
Bin ich noch am Lesen und verstehen wollen.
Sub gross()
Dim N As Long, Anz As Long, Satz As String, DG As Long, Teil As Long
DG = 200000000
Teil = 99999998
Anz = Int(DG / Teil)
Close
Open "C:\test\gross.txt" For Output As #1
Satz = String(Teil, "A")
For N = 1 To Anz
Print #1, Satz
Next N
If DG - Anz \* (Teil + 2) - 2 \>= 0 Then Print #1, Left(Satz, DG - Anz \* (Teil + 2) - 2)
Close #1
Call Anzeige
End Sub
'
Sub Anzeige()
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\test\gross.txt")
MsgBox f.Size
End Sub
Gruß
Reinhard
Das würde m.E schneller gehen!