Maximale Ausdehnung von Text mit VBS ermitteln.
Ich brauche für das Layout einer Webseite die maximale Ausdehnung der einzufügenden Texte.
Hallo alle zusammen.
Ich möchte die maximalen Maße von Textblöcken ermitteln.
Das heißt, einmal die maximale Zeilenanzahl pro Textblock mit der Anzeige der ersten Zeile(Titel) und einmal die maximale Zeichenanzahl pro Zeile, ebenfalls mit der Anzeige der ersten Zeile des entsprechenden Textblocks.
Ich kann leider selber nur sehr wenig VBS und möchte hier mal nachfragen, ob mir da jemand weiterhelfen kann.
Dank und Gruß
Fraenky
Hallo alle zusammen.
Ich möchte die maximalen Maße von Textblöcken ermitteln.
Das heißt, einmal die maximale Zeilenanzahl pro Textblock mit der Anzeige der ersten Zeile(Titel) und einmal die maximale Zeichenanzahl pro Zeile, ebenfalls mit der Anzeige der ersten Zeile des entsprechenden Textblocks.
Ich kann leider selber nur sehr wenig VBS und möchte hier mal nachfragen, ob mir da jemand weiterhelfen kann.
Dank und Gruß
Fraenky
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 69779
Url: https://administrator.de/contentid/69779
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo Fraenky!
Die folgende Version erwartet die Übergabe des Pfades zum Textblock per Parameter (oder per Drag & Drop), wobei eine Überprüfung des übergebenen Dateipfades nicht vorgenommen wird:
Grüße
bastla
[Edit] Ausgabetext zur Berücksichtigung einzeiliger Textblöcke auf "Zeile(n)" geändert. [/Edit]
Die folgende Version erwartet die Übergabe des Pfades zum Textblock per Parameter (oder per Drag & Drop), wobei eine Überprüfung des übergebenen Dateipfades nicht vorgenommen wird:
sTextBlock = WScript.Arguments(0)
Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextBlock = fso.OpenTextFile(sTextBlock, 1)
iZeilenNr = 0
iMaxLen = 0
Do While Not oTextBlock.AtEndOfStream
sZeile = oTextBlock.ReadLine
iZeilenNr = iZeilenNr + 1
If iZeilenNr = 1 Then sErg = sZeile 'erste Zeile
If Len(sZeile) > iMaxLen Then iMaxLen = Len(sZeile)
Loop
sErg = sErg & vbCrLF & _
CStr(iZeilenNr) & " Zeile(n), maximale Länge: " & CStr(iMaxLen)
MsgBox sErg
Grüße
bastla
[Edit] Ausgabetext zur Berücksichtigung einzeiliger Textblöcke auf "Zeile(n)" geändert. [/Edit]
Hallo Fraenky!
Grüße
bastla
Leider war meine Aufgabenstellung noch nicht 100% beschrieben.
Nur interessehalber: Wieviel Prozent waren es bereits? sTextBlock = WScript.Arguments(0)
Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextBlock = fso.OpenTextFile(sTextBlock, 1)
iMaxZeilen = 0
sMaxZeilenText = ""
iMaxLen = 0
sMaxLenText = ""
iZeilenNr = 0
sAktText = "Vor erstem Block ..."
Do While Not oTextBlock.AtEndOfStream
sZeile = oTextBlock.ReadLine
If sZeile <> "" Then 'keine Leerzeile
aZeile = Split(sZeile, " ") 'Zerlegung der Zeile - interessant ist nur der erste Bestandteil.
If Right(aZeile(0), 1) = "." Then 'Endet erster Teil der Zeile auf "."?
If Len(aZeile(0)) > 1 Then 'Befindet sich vor dem "." noch Text ...
If IsNumeric(Left(aZeile(0), Len(aZeile(0) - 1))) Then '... und stellt dieser eine Zahl dar?
'Beginn eines neuen Blocks gefunden
If iZeilenNr > iMaxZeilen Then 'Für vorigen Block Zeilenanzahl überprüfen ...
iMaxZeilen = iZeilenNr
sMaxZeilenText = sAktText
End If
sAktText = sZeile 'Titel des aktuellen Blocks zwischenspeichern (ev auch nur aZeile(0))
iZeilenNr = 0 'Zeilenzähler rücksetzen
End If
End If
End If
End If
iZeilenNr = iZeilenNr + 1 'Zeile auf jeden Fall zählen
If Len(sZeile) > iMaxLen Then 'Länge der aktuellen Zeile größer als bisheriges Maximum
iMaxLen = Len(sZeile) 'Neues Maximum und ...
sMaxLenText = sAktText ' ... Blocktitel speichern.
End If
Loop
'Letzten Block überprüfen ...
If iZeilenNr > iMaxZeilen Then
iMaxZeilen = iZeilenNr
sMaxZeilenText = sAktText
End If
MsgBox "Längster Block mit " & CStr(iMaxZeilen) & " Zeilen:" & vbCrLF & _
sMaxZeilenText & vbCrLF & vbCrLF & _
"Block mit längster Zeile ( " & CStr(iMaxLen) & " Zeichen):" & vbCrLF & _
sMaxLenText
Grüße
bastla
Hallo Fraenky!
Obwohl das Script nicht gänzlich ungetestet war, enthält die Zeile eine falsche Klammersetzung - so sollte es gehen:
Würdest Du bei Fehlern möglichst auch die auslösenden Daten, zB durch ein vorgeschaltetesund Aufruf des Scripts von der Kommandozeile mit
posten - durch Verwendung von "cscript" ersparst Du Dir, MsgBoxes wegzuklicken ...
Den Parameter "C:\skript2\Max-Textgröße\Hinario.txt" habe ich nur der Ordnung halber angeschrieben - in Deiner Version des Scripts hast Du ja offensichtlich die erste Zeile geändert (wobei der Aufruf dennoch mit Parameterübergabe erfolgen kann - dieser wird im Script dann einfach nicht verwendet).
Grüße
bastla
Obwohl das Script nicht gänzlich ungetestet war, enthält die Zeile eine falsche Klammersetzung - so sollte es gehen:
If IsNumeric(Left(aZeile(0), Len(aZeile(0)) - 1)) Then
Würdest Du bei Fehlern möglichst auch die auslösenden Daten, zB durch ein vorgeschaltetes
WScript.Echo sZeile
cscript //nologo "C:\Script2\Max-Textgröße\Scriptname.vbs" "C:\skript2\Max-Textgröße\Hinario.txt"
Den Parameter "C:\skript2\Max-Textgröße\Hinario.txt" habe ich nur der Ordnung halber angeschrieben - in Deiner Version des Scripts hast Du ja offensichtlich die erste Zeile geändert (wobei der Aufruf dennoch mit Parameterübergabe erfolgen kann - dieser wird im Script dann einfach nicht verwendet).
Grüße
bastla
Hallo Fraenky!
Grüße
bastla
... ob ich ein wscript Fenster schließe oder die Konsole mit cscript.
Bei einem Klick für das Konsolenfenster und je einem Klick für die MsgBox-Ausgabe der soeben eingelesenen Zeile in der Schleife (wofür das "WScript.Echo" eigentlich gedacht war) gibt es dann vielleicht doch einen gewissen Unterschied ...... nichts gebracht, weil der Fehler mit der Klammer erst in der folgenden Zeile auftauchte, oder?
Damit hättest Du Recht, wenn der Fehler in jedem Fall (für jede eingelesene Zeile) entstünde, was allerdings nicht der Fall war (zumindest bei den von mir verwendeten Testdaten war kein Fehler gemeldet worden).Grüße
bastla