Beiträge von Concara

    Hallo AspirinJunkie!


    Dieser Fehler ist dann aber im "Consolewrite" Befehl auch vorhanden.

    Oder sehe ich das falsch?

    AutoIt
    Local $iVal = 0xFFFFFFFF
    ConsoleWrite("$iVal = 0xFFFFFFFF" & @CRLF)
    ConsoleWrite('Dec("FFFFFFFF", 0) ............... = ' & Dec("FFFFFFFF", 0) & @CRLF)
    ConsoleWrite('Dec("FFFFFFFF") ............... = ' & Dec("FFFFFFFF") & @CRLF)
    ConsoleWrite("ConsoleWrite $iVal ............... = " & $iVal & @CRLF)

    Ergibt:

    $iVal = 0xFFFFFFFF

    Dec("FFFFFFFF", 0) ............... = 4294967295

    Dec("FFFFFFFF") ............... = -1

    ConsoleWrite $iVal ............... = -1

    water hat mich darauf aufmerksam gemacht, dass meine Frage für andere Nutzer eventuell interessant sein könnte.

    Deshalb hier der CHAT Auszug:

    Concara Vor 17 Stunden


    Hallo hat jemand einen tipp wie ich HEX Zahlen in ein Array schreibe die ich mit einer Schleife generiere? $aArray[1] = 0xffffffff funktioniert aber wenn man es in einer schleifen mit $aArray[$i] = "0xFF" & Hex($i, 6) erstellt nicht



    468-495cafc1807a11db28735fdb6a7a16cbe98532b2.png

    Mars Vor 15 Stunden


    Je nachdem wofür die die "hexzahlen" verwenden willst musst du eine Typumwandlung durchführen. "0xFF" & Hex($i, 6) ergibt einen String, 0xffffffff ergibt ein Integer. Ich weiß ja nicht was du machen willst. Probier mal Int('0xFF' & Hex($i, 6))



    813-726d56c5f162877ec21ceea557692e793dc23143.png

    Musashi Vor 15 Stunden


    #include <Array.au3>

    Local $aHexValues[0]

    For $i = 1 To 1024

    _ArrayAdd($aHexValues, "0xFF" & Hex($i, 6))

    Next

    _ArrayDisplay($aHexValues)



    632-05648137265b9a3f2343ddd4c0ae863a4a718193.png

    Bitnugger Vor 15 Stunden


    #include <Array.au3>

    Local $aHexValues[1025]

    For $i = 0 To 1024

    $aHexValues[$i] = Ptr($i)

    Next

    ConsoleWrite('$aHexValues[99] = ' & $aHexValues[99] & @CRLF)

    _ArrayDisplay($aHexValues)



    509-d163c19b0e98589151a292013422e68693a0cb23.jpg

    Concara Vor 15 Stunden


    Wie Mars schon geschrieben hat so wie Musashi und Bitnugger es gemacht haben. So eine ähnliche schleifen habe ich auch in Verwendung. Danke Mars für den Hinweis, dass Hexzahlen im Array Integer sind. Damit funktioniert es wunderbar.
    509-d163c19b0e98589151a292013422e68693a0cb23.jpg

    Concara Vor 15 Stunden


    $i = Dec("FFFFFF")

    Local $aArray[4][2]

    $aArray[0][0] = 0xFFFFFFFF

    $aArray[0][1] = "0xFFFFFFFF"

    $aArray[1][0] = Int('0xFF' & Hex($i, 6))

    $aArray[1][1] = '0xFF' & Hex($i, 6)

    $i = Dec("FFAAFF")

    $aArray[2][0] = 0xFFFFAAFF

    $aArray[2][1] = "0xFFFFAAFF"

    $aArray[3][0] = Int('0xFF' & Hex($i, 6))

    $aArray[3][1] = '0xFF' & Hex($i, 6)

    _ArrayDisplay($aArray)
    509-d163c19b0e98589151a292013422e68693a0cb23.jpg

    Concara Vor 15 Stunden


    ...Wie Mars schon geschrieben hat so wie Musashi und Bitnugger es gemacht haben sind es auch Strings im Array.
    632-05648137265b9a3f2343ddd4c0ae863a4a718193.png

    Bitnugger Vor 12 Stunden


    Ein Ptr ist definitiv kein String... und was wie mit _ArrayDisplay angezeigt wird, ist eine völlig andere Sache.



    813-726d56c5f162877ec21ceea557692e793dc23143.png

    Musashi Vor 12 Stunden


    Concara : Prüfe einfach mal

    Local $iVal = 1024

    ConsoleWrite("VarTyp $iVal ............... = " & VarGetType($iVal) & @CRLF)

    ConsoleWrite("VarTyp Ptr($iVal) ........... = " & VarGetType(Ptr($iVal)) & @CRLF)

    ConsoleWrite("VarTyp '0xFF' & Hex($iVal, 6) = " & VarGetType("0xFF" & Hex($iVal, 6)) & @CRLF)



    509-d163c19b0e98589151a292013422e68693a0cb23.jpg

    Concara Vor 2 Stunden


    Danke euch beiden. Sorry Bitnugger das ich das mit dem Pointer übersehen habe. Laut Wiki ist das nur was für Profis und der bin ich definitiv nicht. Musashi VarGetType kannte ich noch nicht, ich hoffe ich merke es mir für die Zukunft. Wie MARS schon geschrieben hat speichert Autoit HEX Zahlen in Variabel (Arrays) als Integer somit hat der Code den er geschrieben hat Int('0xFF' & Hex($i, 6)) funktioniert.
    815-f77a182c7065f84012b6a44f74f14ca29a405c0a.jpg

    water Vor 24 Minuten


    Concara So von Ösi zu Ösi. Wenn ich mir die SB so ansehe, dann vermute ich, dass dieses Thema besser in einem eigenen Thema aufgehoben wäre. Dann hätten auch andere Benutzer zukünftig was davon. Aus der SB verschwindet die Diskussion und das erarbeitete Ergebnis sehr schnell wieder.

    BugFix

    Danke für deinen Hinweis und das Code Beispiel!

    Das kann ich sicher noch in einem anderen Projekt gebrauchen.


    Da ich aber nichts weiter als die Datenstruktur ( Laufwerksbuchstabe, Ordner, Dateiname, Endung) erfasse ist es mir egal ob der gleiche Datensatz wieder "aktiviert" wird.

    Sprich die Routine die ich eben noch nicht habe sollte dann das Löschen Flag (in meinem Fall die Kill Spalte) von 1 auf 0 setzen.


    Bei Dateien würde ich anstatt deiner UniqueID den Hashwert der Datei heranziehen.

    Dadurch könnte man auch wiederhergestellte, gleiche Dateien (z.B: Windows Papierkorb) erkennen.

    Hallo Moombas!


    Mir geht es darum es per SQL zu lösen, da dies "nur" ein Versuchsprojekt ist. (Ursprünglicher gedacht als schneller Index für eine statische Webseite)

    Also mehr ums Datenbank Design im Zusammenspiel mit der praktischen Anwendung in AutoIT.


    Mir gefällt die Idee des Flaggens. Dazu habe ich in meiner Tabelle die Spalte Kill.

    Beim Insert fülle ich diese mit einer 0 und wenn eben ein Datei gelöscht wurde sollte diese Spalte auf 1 gesetzt werden.

    Damit alles möglichst platzsparend ist, habe ich in der Datentabelle (IndexDB) einen Unique Index erstellt der verhindert, dass beim erneuten Einlesen die Daten mehrfach in die Tabelle geschrieben wird.

    Also Neue werden in die Tabelle geschrieben.

    Gelöschte Dateien müsste man eben Altstand mit Iststand vergleichen und dann das Flag setzen.


    Ich habe in meinem Programm ein Array mit dem Iststand und würde jetzt die Datenbank in ein Array auslesen und diese beiden Vergleichen.


    Ich hatte mir nur gedacht, ob es eventuell auch eine Möglichkeit gibt, dass sql(ite) das in der Datenbank bewerkstelligen kann.

    Eben keine Ahnung eventuell über einen Trigger, Temptable oder ...?

    Hallo!


    Ich möchte einen Dateiindex per Sqlite von verschiedenen Laufwerken erstellen.

    Dazu lese ich die Dateien per DOS Befehl dir in eine Sqlite Datenbank ein.

    Das funktioniert nach einigem experimentieren recht gut und schnell.

    Mein Problem ist jetzt, dass ich gelöschte Dateien flaggen will. ( Ich hoffe das schreibt man so!?)

    Dazu habe ich mir folgende zwei Methoden vorgestellt.


    1.) Ich lese alle Dateien für ein Laufwerk aus in ein Array und und prüfe sie mit "If FileExists". Ich denke das wird aber recht langsam sein.


    2.) Ich importiere die Daten in die "echt" Tabelle und zusätzlich in eine temporäre Tabelle und vergleiche beide dann.

    Bei dieser Variante weiß ich allerdings noch nicht genau wie. Aber ich denke das lässt sich machen. :/


    Hat jemand von euch eine Idee oder einen konkreten Lösungsvorschlag? :Glaskugel:


    Hier meine Datenbank Struktur:

    autoit.de/wcf/attachment/89435/

    Der RFID Scanner ist doch "sicher" per COM Port angeschlossen!?

    Also hast du sehr wahrscheinlich schon ein Programm das diese Eingabe in den Editor erst ermöglicht?

    Ich denke es wird ein Testprogramm vom Hersteller des Scanners sein?

    Wie wäre es wenn du den COM Port direkt ausliest.

    Hier ein Link zu einer UDF für COM Port

    Serial port UDF / COM port UDF
    Hi heres another UDF for the serial port. It is very similar to CommAPI using kernel32.dll, but all code is packed into a single file without any dependencies,…
    www.autoitscript.com

    Bitte nicht Cross-Posten (oder zumindest darauf verweisen).

    (Please do not cross-post - at least refer to it)


    https://www.autoitscript.com/f…folders-by-creation-date/

    Ich wusste nicht, dass das deutsche Forum jetzt auch schon mit dem Englischen "zusammen arbeitet".

    Früher hat es immer geheißen wir sind ein deutsches Forum also schreibt auch die Fragen in deutsch.


    Meine Meinung:

    Mir ist englisch auch recht. Das macht den deutschsprachigen Raum nicht so unsympathisch.

    Damit können auch Leute aus anderen Staaten was anfangen.

    Allerdings könnte man dann gleich alles im englischen Forum behandeln und bräuchte kein deutsches.


    Water hat es im englischen Forum schon beschrieben wie man es in Autoit umsetzen kann.

    Wenn man nicht viel programmieren will, würde es mit dem dir Befehl in DOS auch rasend schnell gehen.

    dir "C:\Windows\temp" /s /b /a:d /o:-d > c:\temp\%date%.txt


    Jeden Tag die Datei erstellen und z.B: mit Notpad++ Compare vergleichen.

    Außerdem könnte man mit Autoit die erstellte Datei einlesen oder direkt die Ausgabe per StdoutRead einlesen.

    _FileListToArrayRec ist bei vielen Dateien recht langsam.

    Wie es ist, wenn man nur die Ordner benötigt, habe ich noch nie getestet.

    Hallo!


    Deine Frage bezüglich Lizenz sollte ja geklärt sein.

    Als Tipp sei vielleicht erwähnt, dass du dein Software eventuell digital signieren solltest (sofern du ein offizielles Zertifikat für codesigning hast) und beim kompilieren
    solltest du alle Felder "Resource Update" ausfüllen.

    Eventuell selber noch welche hinzufügen. (Siehe Bild)

    Tidy und Au3Stripper über das Script laufen lassen kann auch Sinnvoll sein.

    Je nach dem wie komplex dein Programm ist, kann das allerdings zu Problemen führen.

    Hi!


    Hier ein Codebeispiel, wenn du eine Textdatei hast.

    Trennzeichen ist " " (Leerzeichen)

    $iGesuchteSpalte = 1 (Achtung Array startet bei 0 also 1 wäre die 2 Spalte (B) im Vergleich zu Excel)

    $iAnzahlanSpalten = 2 (mit dem Datensatz von oben gibt es ja nur 2 Spalten ich nehme aber an in deinen echt Daten hast du mehr Spalten)


    Code: Datensatz.txt
    12 Wasser
    14 Milch
    38 Wein
    32 Wein
    14 Wasser
    5 Bier
    41 Wein
    6 Bier
    9 Milch
    33 Milch

    Hi!


    Freut mich, dass ich dir helfen konnte.

    Hier noch eine ältere Version wo die _einlesen Funktion noch den Fehler hatte, dass wenn im ersten Ordner keine PDF Datei lag, dass die anderen Ordner ignoriert wurden.

    (Der Fehler war, das wenn das $aOrdnerProjektnummer1 Array eben kein Array ist (keine PDFs im Ordner1 kein Array), dann verbindet die Funktion _ArrayConcatenate die Arrays nicht.


    Warum stell ich diese Version noch rein.

    Ganz einfach, weil ich diese Kommentiert habe.

    Und die sollte dir die Funktionsweise näher bringen.

    Also falls du noch Interesse hast etwas über die Funktionsweise zu erfahren dann schau sie dir an.

    Als Tip kann ich nur sagen, dass es immer sehr viel bringt, einzelne Codezeilen in der Console auszugeben, um die Fuktionsweise zu überblicken bzw. den Rückgabewert zu erhalten.

    z.b: ConsoleWrite( StringInStr(StringTrimLeft($aOrdner[$ii], StringInStr($aOrdner[$ii], "\", Default, -1)), $sProjektIDAusgabe) )


    Was mich auch immer wieder erstaunt, dass das Tool "Tidy AutoIT Source" so wenig benützt wird. Sofern man den offiziellen SciTE Editor als Programmierumgebung verwendet.

    Dieses Tool find ich einfach nur mega und schaft auf Knopfdruck schön struktuierten Code.

    Hi!


    Es waren noch ein paar kleine Fehler im Script.

    z.B: Wenn im ordner1 keine PDF Datei war, dann wurde bei den Projektnummern nichts eingelesen auch wenn in den Anderen Ordnern PDF Dateien vorhanden waren.


    Ich habe den Teil mit dem Aufruf des externen Programms in die GUI Schleife gegeben.

    Die _Ausgabe() Funktion gibt jetzt "nur" das Array zurück.

    $aRun wurde umbenannt in $aOrdnerMitProjektNR ich hoffe du kannst damit mehr anfangen als Bezeichnung. Es ist das Array mit den PDF Dateien einer Projektnummer zu den Ordnern.

    $aOrdnerMitProjektNR[0] = Ordner1

    $aOrdnerMitProjektNR[1] = Ordner2

    ...

    ...

    qpdf ist bei mir sehr schnell:

    QPDF
    Download QPDF for free. PDF transformation/manipulation program + library. QPDF is a C++ library and set of programs that inspect and manipulate the structure…
    sourceforge.net

    Edit


    Für PDFTK

    Zeile 54: Local $sAusgabeString = 'C:\Program Files\PDFTK\bin\pdftk.exe '

    Zeile 60: $sAusgabeString &= "cat output " & $sAusgabeordner & "\" & $ausgabenamen

    Hi!


    Wenn ihr Windows 10 verwendet fällt mir nur der "Microsoft Print to PDF" Druckertreiber ein, der schon von "Haus" aus auf dem PC installiert ist.

    Ich denke das wird viel komplizierter, wenn es überhaupt damit funktioniert ?


    Hast du nicht was von Terminalserver geschrieben?

    Dort muss man die Software zum zusammenfügen ja nur einmal installieren.

    Das Beispiel mit PDF24 funktioniert bei mir. Habe ich getestet.

    Was für ein Programm verwendest du zum Zusammenfügen von PDFs?


    Das man nicht auf Anhieb alles versteht ist klar, wenn man gerade anfängt etwas zu lernen.

    Wenn du noch eine konkrete Frage hast, dann nur her damit.

    Hi!


    Du wolltest ja keine fertige Lösung!?


    Hier nochmal eine Version, die 6 stellige Nummern erkennt, egal wo sie im Dateinamen steht und Dateien in jedem Ordner erkennt.

    Wichtig! im Dateinamen dürfen nicht 2 oder mehr 6 stellige Nummern vorhanden sein.

    Falls doch, nimmt er die erste von Links.

    Falls die Projektnummer am Anfang der Datei steht, dann sollte dir der Code hier etwas helfen.

    Die Ausgabe müsste allerdings noch programmiert werden.


    Wenn ich dich @DG richtig verstanden habe, könnte man es so gut wie automatisieren ohne jegliche Benutzer Interaktion.

    Ordner 1 bis 4 sagen wir mal einmal in der Minute alle Dateien einlesen. Nach Projektnummer unterteilen. Und wenn in den anderen Ordnern eine Datei mit der Projektnummer vorhanden ist, verbinden lassen und in einen Ordner ausgeben.