Beiträge von Torni

    Hallo Andy,


    das war mit Sicherheit keine Absicht.
    Die Stringlänge aus der DB war für mich gleich mit StringLen, da ich mir das ausgeben liess, nachdem der String/Datei kopiert wurde und ich die Dateilänge aus der DB MANUELL holte.
    Die Orig-Datei konnte ich nicht wirklich mehr überprüfen weil die ja nur noch binär aufm Server lag. Das hatt eich manuell geholt gehabt.
    Dass sich allerdings das Teil wirklich unterschied, hammer und leider speichert er wohl das CRLF direkt beim Einlesen mit dran.. Deswegen war es für mich gleich.


    Das habe ich übersehen, warum auch immer.
    Normal kann man das nicht übersehen, tut mir echt leid.

    ICH GLAUB ES JA NICHT. DAS WAR ES. !!!


    Niederknie... danke dir..


    Und wegen so einem blöden Umbruch schreibt der nicht binär. Da muss man erst mal draufkommen..

    1 14248 0 ist die Consolenausgabe


    Datei hängt an.


    Das mit dem SQLITE ist mir zu hoch. :-(



    Hast mein Zusatz/Edit im vorigen Post gelesen?

    Dateien

    • Test.txt

      (14,25 kB, 136 Mal heruntergeladen, zuletzt: )

    wenn ich die Datei vorher mit FileRead einlese, funktioniert es bei mir auch. Das hatte ich irgendwo weiter oben schon erwähnt.
    Nur wenn ich den kompletten String aus der DB bekomme und schreiben will, nimmt er das nicht.


    Das mit dem Block habe ich nur zum Probieren benutzt, weil hier sonst gar nichts geht.
    Wenn es gehen würde, hätte ich dies sein lassen.
    Ebenso mit FilewriteLine. Das sind nur Versuche, weil ich verzweifel daran..
    Man greift halt nach Strohhalmen...


    @m-obi: die PDF ist das originale. Auch deine Art funktioniert, das schrieb ich auch schon. Das ist ja das was mich verzweifeln lässt.


    Das direkte schreiben des kompletten String, wie er aus der DB kommt funzt einfach nicht.


    Wie gesagt, wenn ich eine Datei vorher einlese oder dne String im Quellcode so wie im Vorpost ablege und schreibe, DANN geht alles einwandfrei.



    EDIT: ich habe mir mal den String per ClipPut in die Zwischenablage kopiert. Wenn ich den im Programm per FileWrite($hExtrFile, Binary(ClipGet())) schreibe, gehts nicht.


    ALLERDINGS: wenn ich mir den jetzt den String irgendwohin kopiere und manuell mittels STRG-C kopiere und erst dann im Programm mit FileWrite($hExtrFile, Binary(ClipGet())) schreibe (vorher CLipPut deaktiviert), dann ist die Datei korrekt??

    Hallo Andy,



    ich schreibe doch im vorigen Post im Quellcode mittels

    $sstrg = StringToBinary($aQResult[3]); komplett unerheblich was ich nutze (Binary, Stringto....) - Resultat ist immer TExtausgabe in die Datei
    $hExtrFile = FileOpen(@ScriptDir & "\" & $aQResult[2] & ".pdf", 16+2) ;force Bin-Mode
    ;msgbox(0,"", IsBinary($sstrg)) ; hier zeigt er "1" an
    FileWrite($hExtrFile, $sstrg)



    schon StringtoBinary, Binarytostring die Datei. Alle drei Varianten ausprobiert. Der schreibt nicht binär. Hier was er übergeben bekommt einfach als MSGBOX ausgegeben:


    [Blockierte Grafik: http://goldise.go.ohost.de/ul/msgbox.jpg]


    Das ist der komplette Binärcode der Datei so wie er sein sollte und wie ich schreiben will. Einfach normal mit MsgBox ausgegeben ausgegeben.


    Wenn ich mir jetzt den String in Blöcke teile und das ganze mittels FilewriteLine/FileWrite schreibe (force binärmode), dann kommt seltsames heraus:



    [Blockierte Grafik: http://goldise.go.ohost.de/ul/ArrayWrite.jpg]


    Den 1.Block des String schreibt er binär und macht mit dem zweiten in Text weiter

    Andy:


    So bekomme ich die Daten aus der Datenbank geliefert. [2] = Name de rOriginaldatei - [3] Die Binärdatei
    [Blockierte Grafik: http://goldise.go.ohost.de/ul/Array1.jpg]


    So sieht die Datei aus, nachdem sie im BINÄR-Modus geschrieben wurde:
    [Blockierte Grafik: http://goldise.go.ohost.de/ul/Schreib.jpg]


    so sieht die Datei aus, wenn man sie sich im Hex-Modus anschaut:
    [Blockierte Grafik: http://goldise.go.ohost.de/ul/Hex_Ansicht.jpg]




    Hier der komplette Code der das betrifft (ist ja nicht viel):


    Die Datei ist gerade mal ~14kb groß, dies zeigt er auch bei beiden StringLen an.
    Die Originaldatei ahbe ich selber erstellt und in die DB einlesen lassen.Wenn ich aus deinem Post das ausführe mit Filewrite und im Quell-Code vorhandenen "0x...." - also niedergeschrieben, dann schreibt er das binär. Nur den übergebenen String nicht.


    Absolut nicht zu verstehen für mich.

    Ja ich will den übergebenen Binär-String aus der DB als Datei speichern.
    In der DB sind tausende PDF abgelegt (binär-Strings) und diese will ich gezielt wieder als PDF speichern.


    Allerdings wenn ich den zusammenhängenden "Binär"-String so direkt speichere, speichert Filewrite trotz Fileopen(...., 16+2) die Daten als Text.
    Dabei ist es unerheblich, ob ich StringtoBinary, Binary noch sonst was nutze.


    Wenn ich mir einen Teilstring von dem übergebenen (aus der DB) hernehme und NUR diesen einzeiligen (weniger als ~4000 Zeichen) genau auf die gleiche Art speichere, dann schreibt er dies Binär, sprich ich habe ein Teil der Originaldatei erstellt (siehe 2.ter Spoiler in Post #1) - nur den Gesamtstring schreibt er nicht so, wie er soll.

    das ist ja das Beispiel um das seltsame Verhalten zu dokumentieren.


    Den "richtigen" String bekomme ich als ganzes aus der Datenbank geliefert. das nimmt er nicht, weil zu gross.
    Da kommt dann die Fehlermeldung:


    F:\....au3 (1) : ==> Unterminated string.:


    Deshalb habe ich den String teilen wollen.
    Wenn man das Beispiel aus Post #1 also den String in eine Zeile schreibt, sieht man dies.

    Es werden definitiv IMMER die ersten 2000 Zeichen binär geschrieben, danach im Klartext als String.
    Hierbei verliert er aber die fehlenden 2000 Zeichen von ersten array ??


    Das u.a. Beispiel kann man schön ausprobieren und sich das Ergebnis anschauen.
    Auch ein Einfügen von "Binary(...) hilft nicht. Da wird doch der Wurm verrückt..


    Schnitzel: hmm, da schreibt er auch den "Binär"-String als Text.


    misterspeed: auch das mit Binbary hatte ich schon versucht, gleiche Ergebnis:




    Seltsam: Test auf IsBinary aus dem 1. Beispiel ergibt 0, wenn der String mehrere Zeilen hat ?!?. Lasse ich den String einzeilig dann ergibt IsBinary "1"


    noch besser: schreibe ich es direkt aus dem Array, schreibt er den ersten Block binär, den rest als Text:


    Hallo BugFix,


    ja und auch mit den anderen schon rumprobiert.
    Allerdings zeigt er im 1.Beispiel - welches ja ordnungsgemäß funktioniert - bei IsBinary ne "0" an - klar, weil es ja ein String ist. Doch warum geht das dort?


    Beide Versionen sind ja Strings, nur der Unterschied dass der zweite um einiges grösser ist; der erste hat bei mir ca. 5500 Bytes und der zweite so um die 1MB.
    Das ist der einzige Unterschied.


    Hier der Code bei der der String aus der DB verabreitet wird:


    Hallo,


    warum geht das erste Beispiel oben im Schnipsel (1. Spoiler)? Da ist ja alles in Ordnung.


    Das ist doch auch nur ein String, so wie der den ich aus der MSSQL bekomme.. (2.Spoiler)
    An für sich beides gleich, nur schreibt Filewrite beim "größeren" String kein Binär sondern alles als Text in die Datei.


    Wie gesagt: aus der DB bekomme ich die Datei als String zurück, so wie im 2.Spoiler" . Deswegen müsste es egal sein, ob ich so eine Datei zur Verfügung stelle. Sind doch beides willkürliche String mit "0x" am Anfang oder?!?

    Hallo,


    Dieses Script-Schnipsel schreibt die Datei so wie sie soll und ist als solches dann ok:



    Das Problem ist folgendes:
    Ich lese aus einer MSSQL-DB den binär eingelesen Inhalt einer Datei ein und erhalte diesen im Prinzip genau wie z.B: oben der Inhalt von Sfileex (natürlich um einige grösser)
    0x255044462D312E340A25E2E3CFD30A312030206F626A203C3C2F547970652F584F626A6563742F436F6C6F7253706163652F446576696365477261......... 
    als String bzw. in nem Array. Aber halt nicht aufgeteilt nach z.B. 4000 Zeichen


    Allerdings schreibt Filewrite dieses als Textinhalt in die Datei. Es ist alles vorhanden was aus der SQL kommt jedoch nicht binär sondern textbasiert. Ich denke, das Problem liegt hier bei der Größe des String/Array, da wohl Filewrite nicht damit zurecht kommt??


    Hat wer ne Idee oder steh ich aufm Schlauch?


    Habe gestern nach Hilfe in der SB mit StringRegExp($sfileex, '(.{1,4000})', 3) ein wenig herumprobiert, kam aber nicht auf einen grünen Zweig

    Tastatur drin lassen und einfach das "flachband-Kabel" dieser und vom touchpad abziehen :- dann sieht es wenigstens noch normal aus und funktioniert trotzdem nicht ..


    OT: ich habe diese woche gerade ein dell-Laptop komplett zerlegt, weil die "***" die festplatte komplett unüblich unten reingebaut haben und ich diese tauschen musste..aber wirklich alles ausbauen muss man da.. ich hab ein horror-szenario bei mir aufm schreibtisch gehabt..
    was ein act..


    EDIT: ups, dein post übersehen chesstiger :-( steht ja das selbe

    wenn du nur was daran ändern willst, habe ich bei mir das so gemacht (irgendwo gefunden):



    seltsamerweise nur für WKS und nicht für Laptops gültig..

    gefunden:


    Func _GUICreateNoTaskBar($sTitle, $iWidth, $iHeight = Default, $iLeft = Default, $iTop = Default, $bStyle = Default, $bStyleEx = Default)
    Return GUICreate($sTitle, $iWidth, $iHeight, $iLeft, $iTop, $bStyle, $bStyleEx, WinGetHandle(AutoItWinGetTitle()))
    EndFunc ;==>_GUICreateNoTaskBar