erik87
Goto Top

Maximale Zeilenbreite einer Datei

Hallo,

ich würde gerne wissen ob es bei der Speicherung einer Zeile in eine Datei eine Art Begrenzung gibt.


Beispielcode:
Dim Out as String  = _
Parameter1 & "#" & _  
Parameter2 & "#" & _  
Parameter3 & "#" & _  
Parameter4 & "#" & _  
[...]
ParameterX

Also ich habe Objekte mit um die 60 Eigenschaften die ich gerne in einer Datei abspeichern möchte. Jenachdem wieviele Objekte zur Laufzeit generiert wurden wird dieser Code in einer FOR-EACH Schleife durchlaufen. Dabei ist OUT dann aber ein Array. Da die Parameter nicht nur 1 Zeichen haben würde ich gerne vorher Wissen ob bei einer bestimmten Anzahl von Zeichen ein Textumbruch erzwungen wird/werden muss. Ein Parameter könnte einen ganzen Satz beherbergen. Sollte es eine Begrenzung der Zeile geben, müsste ich gleich Anfänglich ein Objekt auf mehrere Zeilen aufteilen.


Zur Info:

Als Zeichen meine ich Zahlen als auch Buchstaben in Klein und Großbuchstaben. Sonderzeichen nur in Form von '#' welches als Trennung dient.
Ich benutze VisualStudio2008 und programmiere natürlich in Vb2008 face-smile Ich hoffe das war jetzt verständlich erklärt. xD


Mit freundlichsten Grüßen

Content-ID: 165363

Url: https://administrator.de/contentid/165363

Ausgedruckt am: 16.11.2024 um 23:11 Uhr

bastla
bastla 28.04.2011 um 21:19:57 Uhr
Goto Top
Hallo erik87!

Auf die Schnelle kann ich Dir zwar keine exakte Antwort anbieten, aber als Demo folgende (VBS-) Zeile:
CreateObject("Scripting.FileSystemObject").CreateTextFile("D:\Test.txt").Write Space(20000) & vbCrLf & Space(20000)
Damit wird kommentarlos eine Datei mit 2 Zeilen zu 20002 bzw 20000 Zeichen erzeugt.

Grüße
bastla
Biber
Biber 28.04.2011 um 21:29:56 Uhr
Goto Top
Moin erik87,

bei diesen Fragen tendiere ich mehr zum empirischen Ansatz.
Mach doch einfach ein
Dim s As New String("x", 1000000000)  

und schau, ob dir die Kiste auseinanderfliegt...

In der Theorie der Redmonderinnen dürfte die maximale Stringlänge irgendwas um die 2 GByte sein [Int32.MaxValue].

Allerdings glaube ich nicht ernsthaft daran, dass der Hauptspeicher eines mit normalen Tätigkeiten vor sich hindölmerden Rechners das spontan hergibt ohne Vorwarnung.

Gute Nachricht dann allerdings im Umkehrschluss: Dein bisschen Object mit 60 Eigenschaften stellt eher keine ernsthafte Bedrohung dar.
Hey, so viele Eigenschaften hat ja selbst meine Ex-Schwiegermutti.... das halte ich für überschaubar.

Selbst 60 Eigenschaften, die jeweils in je 1000 Byte [sei es im Hauptspeicher oder in einer Datei] abgelegt werden müssten... so what?

Einzige reale Begrenzung die du haben könntest: ab einer gewissen Zeilenlänge bekommst du den Quatsch nicht mehr in einem normalen Editor angezeigt.
Das macht die Fehlersuche etwas kniffeliger.

Aus diesem Grund würde ich schon ein paar CRLFs reinbasteln und zwar STATT der "#"-Zeichen. face-wink
Grüße
Biber
erik87
erik87 28.04.2011 um 21:51:19 Uhr
Goto Top
Hallo Bastla und Biber,


Danke für die schnelle Antwort. 2000 Zeichen sind durchaus ausreichend für diese Problematik. Es sind viele Boolsche Ausdrücke enthalten. Im Ernstfall könnte es mehr werden. Jedoch bezweifel ich das ein User mehr als 1000 Zeichen als Notiz für einen Baustein hinterlegen will :D Ich werde die Notizmöglichkeit einfach auf 999 Zeichen Begrenzen, dann sollte das passen ;) Danke Danke.

@Biber: Schwiegermütter sind ein schlechtes Beispiel. Die haben meist dynamisch verändernde Eigenschaften bei denen sich Anzahl sowie Kontext stetig ändern (auch wenns kein Sinn macht) :D :D :D


Schönen Abend noch. ;)
Biber
Biber 28.04.2011 um 21:54:21 Uhr
Goto Top
[OT]
Zitat von @erik87:
@Biber: Schwiegermütter sind ein schlechtes Beispiel. Die haben meist dynamisch verändernde Eigenschaften bei denen sich
Anzahl sowie Kontext stetig ändern (auch wenns kein Sinn macht) :D :D :D
Jetzt wo du es schreibst....

meinst du, ich hätte davon eigentlich auch keine Sicherungskopien anlegen müssen? face-wink

Dir auch einen schönen Abend
Biber
[/OT]
erik87
erik87 28.04.2011 um 21:59:59 Uhr
Goto Top
[OT]
Batch-Exkurs als Antwort:

@echo off
cls
For /L %i  in (0,1,1000000000) do echo :D
pause>nul

[/OT]