Hilfe beim formatieren eines Befehls

  • Hallo, ich hab Probleme beim formatieren eines Befehls

    $SQLtoCSV=("SELECT * INTO OUTFILE 'result.csv'FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM csv")

    Das letzte '\n' frisst er nicht und ich weiß nicht wie ich das sauber formatieren muss, damit der mysql Befehl sauber übergeben werden kann.

    Kann mir jemand dabei helfen.

    Gruß

  • Hallo Cerverus,
    ich hab mal ein bischen gegoogelt. So wie ich das verstehe, braucht er nach dem "BY" den tatsächlichen (Hex-)Wert der den Trenner markiert. Und dieser wird aus der Programmiersprache in den SQL-String eingefügt, ist also programmiersprach-spezifisch. Das bedeutet unter AutoIt, dass Du es einmal mit @CRLF oder nur @LF versuchen könntest, ggf.auch mit der Chr-Funktion. (\n) wird, z.B. in der Sprache C benutzt. Ich kann es leider selbst gerade nicht ausprobieren. Hoffe, es hilft Dir weiter... :)

    MfG ThPfund

    "Es könnte alles so einfach sein..."

  • Danke für den Tipp, hat mich leider nicht weiter gebracht. Hab jetzt diverse Varianten durchgespielt und sobald ich das Problem mit '\n' gelöst hab (einfach mal den kompletten terminate Teil weggelassen) springt er mir auf die vorher gehende Stelle OPTIONALLY ENCLOSED BY ' " ' und zeigt mir dort das letzte Hochkomma als Syntaxfehler an.
    Irgendwie muss ich dem Parser (Ich glaube zumindest, dass es daran hängt) verständlich machen, dass ich den Code so haben will wie er da steht und die Syntax so richtig ist. Geht das !?

    Gruß

  • Was mir gerade noch aufgefallen ist:

    Statt $SQLtoCSV = (" ... ") sollte es wohl eher lauten $SQLtoCSV = "( ... )" weil ja eine Zeichenkette zugewiesen wird... ;)

    MfG ThPfund

    "Es könnte alles so einfach sein..."

  • Macht leider keinen Unterschied ob ich die Klammer setze oder nicht, er hat immer noch den Sysntaxfehler an den Hochkommatas.

  • So langsam glaube ich nicht mehr, dass es so geht. :S
    Für den AutoIt-Wrapper ist

    [autoit]


    $SQLtoCSV = _
    "SELECT * INTO OUTFILE 'result.csv' FIELDS TERMINATED " & _
    "BY ',' OPTIONALLY ENCLOSED BY " & Chr(34) & " LINES TERMINATED BY " & @CRLF & "FROM csv"

    [/autoit]


    syntaktisch in Ordnung, SQLite meldet dagegen einen Syntaxerror nach "INTO"...

    Auf der SQLite Seite http://www.sqlite.org/lang_keywords.html
    ist "OUTFILE" gar nicht in der Liste der Keywords aufgeführt.

    Vielleicht wäre das Hilfebeispiel _SQLite_FetchData mit der Ausgabe durch StringFormat() eine Alternative.

    MfG ThPfund

    "Es könnte alles so einfach sein..."

  • Der Befehl OUTFILE ist anscheinend nur in der mysql-Welt gültig http://dev.mysql.com/doc/refman/5.0/en/select.html und er funktioniert auch, wenn ich ihn direkt über die Oberfläche von phpmyadmin bzw. über Kommandozeile eingebe. Nichts desto trotz werde ich mich mal an deiner Idee mit dem FetchData und dem Stringformat versuchen. Hast du zufällig ein Beispiel an dem ich mich orientieren könnte ?

    MFG

  • Nein, bisher nur das aus der Hilfe:

    Spoiler anzeigen
    [autoit]


    #include <SQLite.au3>
    #include <SQLite.dll.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $hQuery, $aRow, $aNames
    _SQLite_Startup ()
    ConsoleWrite("_SQLite_LibVersion=" &_SQLite_LibVersion() & @CR)
    _SQLite_Open () ; open :memory: Database
    _SQLite_Exec (-1, "CREATE TABLE aTest (a,b,c);")
    _SQLite_Exec (-1, "INSERT INTO aTest(a,b,c) VALUES ('c','2','World');")
    _SQLite_Exec (-1, "INSERT INTO aTest(a,b,c) VALUES ('b','3',' ');")
    _SQLite_Exec (-1, "INSERT INTO aTest(a,b,c) VALUES ('a','1','Hello');")
    _SQlite_Query (-1, "SELECT ROWID,* FROM aTest ORDER BY a;", $hQuery)
    _SQLite_FetchNames ($hQuery, $aNames)
    ConsoleWrite(StringFormat(" %-10s %-10s %-10s %-10s ", $aNames[0], $aNames[1], $aNames[2], $aNames[3]) & @CR)
    While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK ; Read Out the next Row
    ConsoleWrite(StringFormat(" %-10s %-10s %-10s %-10s ", $aRow[0], $aRow[1], $aRow[2], $aRow[3]) & @CR)
    WEnd
    _SQLite_Exec (-1, "DROP TABLE aTest;")
    _SQLite_Close ()
    _SQLite_Shutdown ()

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Output:
    ;~
    ;~ rowid a b c
    ;~ 3 a 1 Hello
    ;~ 2 b 3
    ;~ 1 c 2 World

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    Und mit StringFormat() kannst Du die einzelnen Variablen und Konstanten (wie " und , ) formatiert einfügen.
    Die Funktion Ist auch in der Hilfe beschrieben. :)

    MfG ThPfund

    "Es könnte alles so einfach sein..."