Windows-Scriptsprache mit Binärdatei-Funktionalität ?
Script Host mit VB- oder JScript steht ja zur Verfügung, aber ...
... kein Datei-Zeiger, kein Lesen oder Schreiben von Teilsequenzen.
Schade drum, JavaScript als hinreichend prägnante Sprache und das vorinstalliert auf allen aktuellen Versionen wäre schon 'ne schöne Sache gewesen.
Muss wohl für 'ne wirklich professionelle Lösung ein Drittanbieter her. Irgendwelche Erfahrungen, insbesondere mit den Implementierungen von Perl ( ActivePerl ) oder Php ?
... kein Datei-Zeiger, kein Lesen oder Schreiben von Teilsequenzen.
Schade drum, JavaScript als hinreichend prägnante Sprache und das vorinstalliert auf allen aktuellen Versionen wäre schon 'ne schöne Sache gewesen.
Muss wohl für 'ne wirklich professionelle Lösung ein Drittanbieter her. Irgendwelche Erfahrungen, insbesondere mit den Implementierungen von Perl ( ActivePerl ) oder Php ?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153166
Url: https://administrator.de/forum/windows-scriptsprache-mit-binaerdatei-funktionalitaet-153166.html
Ausgedruckt am: 23.12.2024 um 17:12 Uhr
16 Kommentare
Neuester Kommentar
Moin StefanSch,
willkommen im Forum.
Natürlich geht es mich überhaupt nichts an, aber....
Magst du nicht wenigstens andeuten, für welches Vorhaben du ein geeignetes Werkzeug brauchst?
Ich meine, wenn ich in einem Baumarkt an der Information frage "Was haben Sie denn so für Werkzeug sofort zum Mitnehmen?"
... das Gespräch kann dann entweder sehr sehr kurz oder sehr sehr lang werden..
Ich kann dich heute leider nicht direkt in den Papierkorb geleiten, weil ein SpamBot gerade den Einlass dauerblockiert, sorry...
Aber wenn du es innerhalb der nächsten 2 Stunden nicht schaffst, die Frage auf "zielführend beantwortbar" umzuformulieren, dann finde ich ein Hintertürchen.
Grüße
Biber
willkommen im Forum.
Natürlich geht es mich überhaupt nichts an, aber....
Magst du nicht wenigstens andeuten, für welches Vorhaben du ein geeignetes Werkzeug brauchst?
Ich meine, wenn ich in einem Baumarkt an der Information frage "Was haben Sie denn so für Werkzeug sofort zum Mitnehmen?"
... das Gespräch kann dann entweder sehr sehr kurz oder sehr sehr lang werden..
Ich kann dich heute leider nicht direkt in den Papierkorb geleiten, weil ein SpamBot gerade den Einlass dauerblockiert, sorry...
Aber wenn du es innerhalb der nächsten 2 Stunden nicht schaffst, die Frage auf "zielführend beantwortbar" umzuformulieren, dann finde ich ein Hintertürchen.
Grüße
Biber
und um dir mal ne kleine hilfe zu geben:
Perl / PHP sind idR nicht bei Windows dabei...
Warum nicht Java? Ne JRE hast du oftmals schon dabei....
Aber es wäre natürlich hilfreich zu wissen was du möchtest... Und nen kleiner Tipp: VOR deinem nächsten Posting les es bitte nochmal durch! Denn ich verstehe nicht wirklich was du möchtest... Und ich hoffe du schaffst das innerhalb der 2h-Einlass-Sperre von unserem Freund mit den scharfen Zähnen...
Perl / PHP sind idR nicht bei Windows dabei...
Warum nicht Java? Ne JRE hast du oftmals schon dabei....
Aber es wäre natürlich hilfreich zu wissen was du möchtest... Und nen kleiner Tipp: VOR deinem nächsten Posting les es bitte nochmal durch! Denn ich verstehe nicht wirklich was du möchtest... Und ich hoffe du schaffst das innerhalb der 2h-Einlass-Sperre von unserem Freund mit den scharfen Zähnen...
JavaScript als hinreichend prägnante Sprache und das vorinstalliert auf allen aktuellen Versionen wäre schon 'ne schöne Sache gewesen.
JavaScript ist vorinstalliert als OS-Scriptsprache.
Das heißt dort nur JScript.
Und mal ehrlich: Mit VBS oder PowerShell hast du Zugriff auf nahezu alle wichtigen Klassen und das betrifft auch Dateien.
Hallo StefanSch!
Hier mal ein VBS-Beispiel, wie man per FileSystemObject und ADODB.Stream auch binäre Dateien bearbeiten kann.
Schritt 1: Eine 256-Byte große Test.Bin-Datei erzeugen mit den Werten von 00h - FFh
Schritt 2: Eine 16-Byte große Kopf.Bin-Datei erzeugen Hex-Werte von Ascii-Zeichen A-P
Schritt 3: Eine 16-Byte große Fuss.Bin-Datei erzeugen Hex-Werte von Ascii-Zeichen a-p
Schritt 4: Binary-Kopf.Bin-Datei in Byte-Array einlesen
Schritt 5: Binary-Test.Bin-Datei ab Position SkipBeg bis SkipEnd in Byte-Array einlesen
Schritt 6: Binary-Fuss.Bin-Datei in Byte-Array einlesen
Schritt 7: Byte-Arrays Ausgabe.Bin-Datei schreiben
Gruß Dieter
Hier mal ein VBS-Beispiel, wie man per FileSystemObject und ADODB.Stream auch binäre Dateien bearbeiten kann.
Schritt 1: Eine 256-Byte große Test.Bin-Datei erzeugen mit den Werten von 00h - FFh
Schritt 2: Eine 16-Byte große Kopf.Bin-Datei erzeugen Hex-Werte von Ascii-Zeichen A-P
Schritt 3: Eine 16-Byte große Fuss.Bin-Datei erzeugen Hex-Werte von Ascii-Zeichen a-p
Schritt 4: Binary-Kopf.Bin-Datei in Byte-Array einlesen
Schritt 5: Binary-Test.Bin-Datei ab Position SkipBeg bis SkipEnd in Byte-Array einlesen
Schritt 6: Binary-Fuss.Bin-Datei in Byte-Array einlesen
Schritt 7: Byte-Arrays Ausgabe.Bin-Datei schreiben
Const TestFile = "E:\Test\Test.Bin"
Const KopfFile = "E:\Test\Kopf.Bin"
Const FussFile = "E:\Test\Fuss.Bin"
Const BinFile = "E:\Test\Ausgabe.Bin"
Const SkipKopf = 16
Const SkipFuss = 16
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim Fso, File, BinStream, TextStream, BinArray, KopfArray, FussArray, i
Set Fso = CreateObject("Scripting.FileSystemObject")
'Schritt 1 (Test.Bin erstellen)
For i = 0 To &HFF& 'Ergibt Bin 00h - FFh (256-Byte)
TextStream = TextStream & Chr(i)
Next
Set File = Fso.CreateTextFile(TestFile)
File.Write TextStream: File.Close
'Schritt 2 (Kopf.Bin erstellen 16-Byte)
TextStream = ""
For i = 0 To SkipKopf - 1 'Ergibt Bin 41h(A), 42h(B), 43h(C)...50h(P)
TextStream = TextStream & Chr(i + Asc("A"))
Next
Set File = Fso.CreateTextFile(KopfFile)
File.Write TextStream: File.Close
'Schritt 3 (Fuss.Bin erstellen 16-Byte)
TextStream = ""
For i = 0 To SkipFuss - 1 'Ergibt Bin 61h(a), 62h(b), 63h(c)...70h(p)
TextStream = TextStream & Chr(i + Asc("a"))
Next
Set File = Fso.CreateTextFile(FussFile)
File.Write TextStream: File.Close
Set BinStream = CreateObject("ADODB.Stream")
With BinStream
'Schritt 4 (Kopf.Bin einlesen)
.Type = adTypeBinary
.Open
.LoadFromFile KopfFile
KopfArray = .Read
.Close
'Schritt 5 (Test.Bin einlesen 224-Byte)
.Open
.LoadFromFile TestFile
.Position = SkipKopf
BinArray = .Read(.Size - SkipKopf - SkipFuss)
.Close
'Schritt 6 (Fuss.Bin einlesen)
.Open
.LoadFromFile FussFile
FussArray = .Read
.Close
'Schritt 7 (Ausgabe.Bin schreiben)
.Open
.Write KopfArray
.Write BinArray
.Write FussArray
.SaveToFile BinFile, adSaveCreateOverWrite
.Close
End With
Gruß Dieter
Hallo StefanSch!
Das war auch nur als generelles Beispiel gedacht. Und mal davon abgesehen, dass kein Arbeitsspeicher 100 GB schafft, ist auch der Dateizeiger auf Long begrenzt.
Gruß Dieter
Das war auch nur als generelles Beispiel gedacht. Und mal davon abgesehen, dass kein Arbeitsspeicher 100 GB schafft, ist auch der Dateizeiger auf Long begrenzt.
Gruß Dieter
Hallo StefanSch!
Ok, wenn Du Recht hast und es ein LongLong-Zeiger ist, kannst Du mit ADODB trotzdem keine so großen Dateien einlesen.
Gruß Dieter
Ok, wenn Du Recht hast und es ein LongLong-Zeiger ist, kannst Du mit ADODB trotzdem keine so großen Dateien einlesen.
Gruß Dieter
Hallo StefanSch!
Habe das mit dem Blockweisen einlesen mit einer Image-Datei versucht (ca 17GB), aber das funktioniert nicht, weil ADODB offensichtlich versucht, die komplette Datei in den Arbeitsspeicher zu laden
Gruß Dieter
Zitat von @StefanSch:
Hmmm. Wenn ich die Dokumentation von 'ADODB.Stream' aber richtig verstanden habe, lädt die Methode
'.LoadFromFile' beim Aufruf die gesamte Datei in den Arbeitsspeicher ( siehe z.B.
http://msdn.microsoft.com/en-us/library/ms677570(VS.85).aspx ). Kann mich natürlich irren.
Ansonsten wär' das mit dem Block-weisen einlesen 'ne Idee. Werd's mal ausprobieren und berichten ...
Meinen letzten Kommentar oben geändert:Hmmm. Wenn ich die Dokumentation von 'ADODB.Stream' aber richtig verstanden habe, lädt die Methode
'.LoadFromFile' beim Aufruf die gesamte Datei in den Arbeitsspeicher ( siehe z.B.
http://msdn.microsoft.com/en-us/library/ms677570(VS.85).aspx ). Kann mich natürlich irren.
Ansonsten wär' das mit dem Block-weisen einlesen 'ne Idee. Werd's mal ausprobieren und berichten ...
Habe das mit dem Blockweisen einlesen mit einer Image-Datei versucht (ca 17GB), aber das funktioniert nicht, weil ADODB offensichtlich versucht, die komplette Datei in den Arbeitsspeicher zu laden
Gruß Dieter
Hallo nochmal!
Andere Möglichkeit wäre vielleicht die Datei erst mit einem Datei-Splitter in 1-GB Blöcke zu zerlegen, zu ändern und wieder zusammenzufügen?
Hab's mal mit Windows-GSplit 3.0.1 und einer ca 21 GB-großen Datei in 1GB-Blöcken versucht und funktioniert recht gut.
http://software-portal.faz.net/windows/dateien-splitten-664
Gruß Dieter
Andere Möglichkeit wäre vielleicht die Datei erst mit einem Datei-Splitter in 1-GB Blöcke zu zerlegen, zu ändern und wieder zusammenzufügen?
Hab's mal mit Windows-GSplit 3.0.1 und einer ca 21 GB-großen Datei in 1GB-Blöcken versucht und funktioniert recht gut.
http://software-portal.faz.net/windows/dateien-splitten-664
Gruß Dieter
Psst http://msdn.microsoft.com/de-de/library/system.io.filestream(VS.80).asp ...
VBS hat übrigens Zugriff auf die meisten .NET Klassen und Powershell auf alle.
VBS hat übrigens Zugriff auf die meisten .NET Klassen und Powershell auf alle.