1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. ugt100

Beiträge von ugt100

  • Zeichenfolge finden in einer Textdatei und 'kopieren' in eine Variable zur Weiterverwendung

    • ugt100
    • 5. Dezember 2018 um 10:18

    so nun auch auf erledigt gesetzt

  • Zeichenfolge finden in einer Textdatei und 'kopieren' in eine Variable zur Weiterverwendung

    • ugt100
    • 5. Dezember 2018 um 10:15

    Guten morgen zusammen,

    vor allen einen Dank für die Unterstützung.

    Die Kuh ist vom Eis - mittels FileOpen + FileSetPos (Vorschlag von Alpines)

    Der Grund ist die Tatsache, dass sich der gesuchte String immer am Ende des Files (letzten 13 Zeichen mit bekanntem Muster) zu suchen/finden ist.

    Ein (für mich) zweiter Effekt ist das RegEx Pattern ("‚¬\|v(.+\..+)\..+', 3) - das kann ich als 'Schablone' für diverse Suchen einsetzen - Ein sehr willkommener Nebeneffekt !:):):)

    Also allen nochmals vielen Dank für die kompetente, schnelle und verständliche Hilfe

    Gruss

    ugt100

    :thumbup::thumbup::rock::thumbup::thumbup:

  • Zeichenfolge finden in einer Textdatei und 'kopieren' in eine Variable zur Weiterverwendung

    • ugt100
    • 4. Dezember 2018 um 15:35

    Hallo zusammen,

    danke für die schnellen Antworten.

    zu den Rückfragen:

    Zeichen Position: ja das sind immer die letzten 13 Zeichen des Files

    Grössenordnung des jeweiligen Log Files: die Files sing zw. 4 und 7 GB gross

    Art der Zeichen: es sind immer Zahlen (X, YY)


    Das mit mit 'FileSetPos an die entsprechende Position springen' klingt gut - das schaue ich mir dann mal genauer an

    Gruss

    ugt100

  • Zeichenfolge finden in einer Textdatei und 'kopieren' in eine Variable zur Weiterverwendung

    • ugt100
    • 4. Dezember 2018 um 15:13

    Hallo zusammen,

    irgendwie drehe ich mich immer wieder im Kreis und komme nicht weiter.

    Folgendes 'Problem' habe ich:

    Ich habe ein Log File das mehrmals am Tag geschrieben wird und immer unterschiedlich groß ist und auch unterschiedliche Inhalte hat.

    Die letzten Zeichen des FIles liegen immer in der Form s.u. vor.

    (Anmerkung: ‚¬|- diese Zeichenfolge kommt oft vor, sodass suchen nach dieser nicht das gewünschte Ergebnis bringt)

    ----> "‚¬|vX.YY.ZZZZ" <-----

    Aus diesem 'String' benötige ich jetzt nur den Teil "X.YY".

    Meine Frage ist es, was man wirklich Schlaues tun kann um das Ergebnis zu erhalten

    z.B: Suche nach String ‚¬|v?(wildcard).?(wildcard)?(wildcard)

    (natürlich kann ich das File einlesen und mich dann durchhangeln. Das ist aber ziemlich langsam - befürchte ich)

    Danke schon mal im voraus :thumbup::thumbup:

  • Teil String im Array finden

    • ugt100
    • 27. April 2017 um 13:09

    Hallo autoiter
    auch dir Vielen Dank.
    Lesen müsste man können - denn da stehts ja

    Wie blöd :S:S von mir

    Gruss
    ugt100

  • Teil String im Array finden

    • ugt100
    • 27. April 2017 um 13:02

    Hallo Aplines,

    DANKE für die schnelle Antwort/Lösung ...
    Das ist natürlich gewitzt eine 'eigene' Suche durhs Array laufen zu lassen. :klatschen::klatschen::klatschen:

    Supi


    Gruss
    ugt100

  • Teil String im Array finden

    • ugt100
    • 27. April 2017 um 12:24

    Hallo zusammen,
    ich komme mit meinem Problem einfach nicht weiter, darum wende ich mich an die Profis.

    Problem:
    Ich hole mir von einem Wetterdienst (aus dem Web) Daten zum Wetter in 5 Städten, die ich in ein Array schreibe.
    Soweit sogut.
    Der Knackpunkt ist jetzt folgender:

    Das Array welches gefüllt wird hat leider nicht immer die gleiche Anzahl an Elementen (variiert zwischen 24 und 26 Elementen)
    Zur Weiterverarbeitung brauche ich (z.B.) den Städtenamen der letztlich in einem dieser Element steht.
    Leider ist aber Position nicht immer gleich (also z.B. nicht immer 24. Element)

    Nun dachte ich, da dieses Element hat immer gleich aufgebaut ist, nämlich ["name":"STADTNAME"], ich könnte über eine 'Teil String' Suche die Position ermitteln.
    Also nach dem Motto suche im Array nach dem String, welcher mit "name"." beginnt und gib die Elementnummer zurück

    Leider klappt das so nicht ...

    Was geht ist:
    $sCitySearch = ' '"name":"koeln" '
    $sCitySearchPos = _ArraySearch($aResult; sCitySearch)
    (also der gesamte String)

    Das geht nicht:
    $sCitySearch = ' '"name":
    $sCitySearchPos = _ArraySearch($aResult; sCitySearch)
    (also der Teil String bzw. die ersten 7 Zeichen des gesamten Strings)


    Ich habe das mit StringInStr versucht - kein Erfolg
    Funktioniert das vielleicht mit StringRegExp ?


    Wahrscheinlich keijn grosses Ding - wenn man es weiss

    Danke schon einmal im voraus :rock:


    Gruss
    ugt100

  • Verzeichnisgrößen ermitteln und in Array schreiben

    • ugt100
    • 10. Juni 2016 um 13:51

    Nochmals ein Danke an alle hier im Thread und im Forum, dies sich 'meiner angenommen' haben ...

    Thank you, Mille Gracie, Gracias ....

  • Verzeichnisgrößen ermitteln und in Array schreiben

    • ugt100
    • 10. Juni 2016 um 13:50

    Hallo bazii,

    Danke für Deine Antwort und den Tip.
    Ich mache jetzt letzlich eine Mischng aus den Vorschlägen.Ich liste die für mich relavaten Verzeichnisse (LUN's) jetz mit einem CMD command (dir *. | FIND /I "<V"),schreibe das in Array,entferne die überflüssigen Informationen mittels StringHandling aus dem Array und nutze dann ein Autoit Script
    (auf Basis dessen von Kanashius und meinem eigenen Anteil).

    Das klappt soweit und gut ist


    Gruss
    ugt100

  • Verzeichnisgrößen ermitteln und in Array schreiben

    • ugt100
    • 9. Juni 2016 um 15:15

    Hi Aspirin Junkie

    doch das funktioniert weil das letztlich eingehängte (also quasi per Link) Festplatten(stapel) sind.
    Zu Fuss kannst Du Dir das LW z.b. M:\ mappen, wechselst dann in M:\123 und machst ein Dir auf der Command Line.
    Dann bekommst Du so etwas:

    438 Datei(en), 146.520.160.353 Bytes
    0 Verzeichnis(se), 36.318.412.800 Bytes frei

    oder du schaust Dir das Ganze über den (Windows) Diskmanager an

  • Verzeichnisgrößen ermitteln und in Array schreiben

    • ugt100
    • 9. Juni 2016 um 14:00

    Hallo Kanashius


    danke für die schnelle Antwort. Leider zeigt Dein Script -zumindest bei mir - keinerlei Ergebnisse an.
    Es läuft fehlerfrei durch und das wars.


    Zur besseren Anschaulichkeit hier mal ein Beispiel:
    Mit _FileListToArray("M:\", "*", 2, "True") ;List folders only hole ich mir die Verezicnisse die unter dem Stamm M:\ zu finden sind.


    Z.B.
    M:\abc
    M:\def
    M:\ghi
    M:\jkl
    zu diesen (Unter)Verzeichnissen benötige ich jetzt den 'FreeSpace'


    Letztlich sollte die Anzeige des ErgebnisArrays wie folgt aussehen:
    M:\abc 12,1 GB
    M:\def 8,7 GB
    M:\ghi 10,5 GB
    M:\jkl 14,4 GB


    Ich offe jtzt ist es verständlich - oder ?


    gruss + danke
    ugt100



  • Verzeichnisgrößen ermitteln und in Array schreiben

    • ugt100
    • 9. Juni 2016 um 13:52

    Hallo Aspirin Juie,

    nei n so ist das nicht wirklich.
    Zur besseren Anschaulichkeit hier mal ein Beispiel:
    Mit _FileListToArray("M:\", "*", 2, "True") ;List folders only hole ich mir die Verezicnisse die unter dem Stamm M:\ zu finden sind.

    Z.B.
    M:\abc
    M:\def
    M:\ghi
    M:\jkl
    zu diesen (Unter)Verzeichnissen benötige ich jetzt den 'FreeSpace'

    Letztlich sollte die Anzeige des ErgebnisArrays wie folgt aussehen:
    M:\abc 12,1 GB
    M:\def 8,7 GB
    M:\ghi 10,5 GB
    M:\jkl 14,4 GB


    Ich offe jtzt ist es verständlich - oder ?

    gruss + danke
    ugt100

  • Verzeichnisgrößen ermitteln und in Array schreiben

    • ugt100
    • 9. Juni 2016 um 13:19

    Hallo Aspirin Junkie

    sorry - Du hast natürlich recht .... Ich will den jeweiligen FREE Space ermitteln (habe ich im Text verdattelt :-()

  • Verzeichnisgrößen ermitteln und in Array schreiben

    • ugt100
    • 9. Juni 2016 um 12:54

    Hallo zusammen,
    habe gerade irgendwie eine (gedankliche) Blockade, hoffe aber hier geholfen zu bekommen.

    Ich will/muss auf diversen Servern die jeweiligen Größen der vorhandenen Directories ermitteln.
    Die Serven haben sowohl physikalische LW als auch logische (LUN's).

    Nach Mappen des jeweilen Serverlaufwerkes (DriveMapAdd), erzeuge ich mittels _FileListToArray ein Array mit den vorhanden Directorys.
    Soweit - so gut


    Der nächste Schritt - denke ich zumindest - ist ein

    For $i = 1 To $aFileList[0]$iFreeSpace = DriveSpaceFree($aFileList[i])

    $aDirSize = $iFreeSpace$iFreeSpace <----- und das soll jetzt auch noch der Dir Name ($aFileList[i]) mit ins Array geschrieben werden

    Next

    und jetzt hängt es bei mir. Folgendes sollte passieren:


    Es soll wieder ein Array erzegut werden in dem zum einen der Dir Name (also $aFileList[i]) und zum zweiten die Grösse (also $iFreeSpace) geschrieben wird.

    Zum Ende soll dann dieses Array (_ArrayDisplay()) angezeigt werden.


    Hier mein Versuch soweit:

    C
    #include <Array.au3>
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    DriveMapAdd("M:", "\\XXXXXX\D$\123", $DMA_DEFAULT, "blablabla", "blub") ;Mapping networkdrives
    cdeDir()
    For $i = 1 To $aFileList[0]
         $iFreeSpace = DriveSpaceFree($aFileList[i])  ;compute dirsize
         $aDirSize = $iFreeSpace
    Next
    Func cdeDir()
        Local $aFileList = _FileListToArray("M:\", "*", 2, "True") ;List folders only
        If @error = 1 Then
            MsgBox($MB_SYSTEMMODAL, "", "Path was invalid.")
            Exit
        EndIf
        If @error = 4 Then
            MsgBox($MB_SYSTEMMODAL, "", "No dir(s) were found.")
            Exit
        EndIf
        _ArrayDisplay($aFileList, "$aFileList") ;List all the folders
    EndFunc   ;==>cdeDir
    Alles anzeigen


    Danke schon einmal im voraus für die Tips/ Hilfe

    Gruss
    ugt100

  • (Standard)FensterGrösse des _ArrayDisplay Fenster beeinflussen (MyArrayDisplay - von AutoBert)

    • ugt100
    • 12. April 2016 um 08:36

    Guten morgen autoBert,

    das ging jetzt aber fix. Hat es Dich nicht in Ruhe gelassen ?
    Auf jedenfall vielen Dank für das sehr schnelle fixen (ich hätte das nicht gefunden glaube ich mal)

    Also nochmals DANKE

    Gruss
    Chris

    P.S. Deine Ideen in Sachen ArrrayDisplay sind gut - und nice to have. Erinnert dann ja fast an eine Excel Tabelle.
    Aber sicherlich muss man abschätzen wie Aufwand zu Ertrag steht ...

  • (Standard)FensterGrösse des _ArrayDisplay Fenster beeinflussen (MyArrayDisplay - von AutoBert)

    • ugt100
    • 10. April 2016 um 10:28

    Hallo AutoBert,

    ich hatte gehofft, das Du meine Frage siehst und liest ... :)
    Ja ich setzte die aktuelle 'stable Version' von AutoIt ein - also 3.3.14.2
    Schön das es aus Deiner (Profi) Sicht möglich ist die Problematik zu fixen - die Terminlichkeit ist mir nicht so wichtig,
    da ich ja letztlich mit _ArrayDisplay ein Ergebnis bekomme. Die 'schöne' Ansicht ist ja letztlich ein AdOn Bonbon - aber äussert angenehm, wenn vorhnden / funktionabel.

    Dann harre ich mal der Dinge die kommen und warte auf das 'solved' flag.

    Danke
    Gruss
    ugt100 (chris)

  • (Standard)FensterGrösse des _ArrayDisplay Fenster beeinflussen (MyArrayDisplay - von AutoBert)

    • ugt100
    • 9. April 2016 um 11:56

    Guten Morgen,

    nach langer Zeit wollte ich mich wieder einmal der 'gebauten' MyArrayDisplay von Autobert bedienen
    (seinerzeit hatte ich diese beim einem grossen Migrationsprojekt beim Anzeigen von AD Infos genutzt).

    In dem jetzigen Anwendungsfall geht es um das rekursive Auslesen von Dateien inkl. der Dateigrößen.
    Die Anzeige würde ich (wieder) mittels der MyArrayDisplay anpssen lassen. Leider klappt das nur noch bedingt, denn die Darstellung des Arrays
    ist reduziert auf 2 schmale Spalten innerhalb der GUI - (Einen Screenshot habe ich als Datei attached)

    Mir ist es bis dato nicht gelungen diesen Effekt zu fixen :-(((

    Vielleicht weiss ja einer der 'Profis' weiter

    Danke schon einmal im voraus.

    Gruss UGT100


    Rekursives Suchen

    Code
    #include<Array.au3>
    #include<Date.au3>
    #include<File.au3>
    #include<MyArrayDisplay_new.au3>
    
    
    Global $cdeDir = FileSelectFolder("Startverzeichnis für den DirScan auswählen:","")
    SplashTextOn("Get Files and File Size", "Please wait - processing the requested filelist", 400, 50)
    
    
    $cdeDir1 = StringReplace($cdeDir, ":", "_")
    $cdeDir1 = StringReplace($cdeDir1, "\", "_")
    
    
    $ret = _GetFilesFolder_Rekursiv($cdeDir, '*',0,0)
    ;~ If IsArray($ret) Then
    ;~     _ArrayDisplay($ret, 'Rekursiv alle Dateien')
    ;~ Else
    ;~     ConsoleWrite($ret & @CRLF)
    ;~ EndIf
    
    
    Local $a2[Ubound($ret)][2] = [[$ret[0], '']]
    For $i = 1 To $ret[0]
        $a2[$i][0] = $ret[$i]
    ;~ 		$a2[$i][1] = (FileGetSize($ret[$i])) & " Bytes"
    	$a2[$i][1] = (FileGetSize($ret[$i]))
    ;~      $a2[$i][1] = Round(FileGetSize($ret[$i])/1048576) & " MB"
    ;~		$iSize = FileGetSize($ret[$i])
    ;~      If @error Then ConsoleWrite("Fehler bei Datei: " & $ret[$i] & @LF)
    ;~      $a2[$i][1] = Round($iSize) & " Bytes"
    Next
    $a = ''
    
    
    _FileWriteFromArray(@ScriptDir & "\cdeFileSize_" & @ComputerName & "_" & $cdeDir1 & ".txt", $a2, 1)
    _ArraySort($a2, 1, 0, 0, 1)
    SplashOff()
    
    
    ;~ _ArrayDisplay($a2)
    
    
    ;~ MyArrayDisplay_new($a2, "Path: " & $cdeDir & ":             Filelist                                     Filesize", "500|300")
    
    
    _MyArrayDisplay($a2, "Path: " & $cdeDir & ":             Filelist                                     Filesize", "500|300|500")
    
    
    
    
    
    
    
    
    ;==================================================================================================
    ; Function Name:   _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description:     Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s):    $sPath     der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ;                  $sExt      Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ;                  $iDir      -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ;      optional:   $iRetType  0 gibt Array, 1 gibt String zurück
    ;      optional:   $sDelim    legt Trennzeichen für Stringrückgabe fest
    ;                             0 -@CRLF (Standard)  1 -@CR  2 -@LF  3 -';'  4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ;                  Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s):       BugFix (bugfix@autoit.de)
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
        Global $oFSO = ObjCreate('Scripting.FileSystemObject')
        Global $strFiles = ''
    	Switch $sDelim
    		Case '1'
    			$sDelim = @CR
    		Case '2'
    			$sDelim = @LF
    		Case '3'
    			$sDelim = ';'
    		Case '4'
    			$sDelim = '|'
    		Case Else
    			$sDelim = @CRLF
    	EndSwitch
        If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
        If $sExt = -1 Then $sExt = '*'
        If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
        _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
        If $iRetType = 0 Then
            Local $aOut
            $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
            If $aOut[1] = '' Then
                ReDim $aOut[1]
                $aOut[0] = 0
            EndIf
            Return $aOut
        Else
            Return StringTrimRight($strFiles, StringLen($sDelim))
        EndIf
    EndFunc
    
    
    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    	If Not IsDeclared("strFiles") Then Global $strFiles = ''
        If ($Dir = -1) Or ($Dir = 0) Then
            For $file In $Folder.Files
                If $Ext <> '*' Then
                    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
                        $strFiles &= $file.Path & $Delim
                Else
                    $strFiles &= $file.Path & $Delim
                EndIf
            Next
    	EndIf
        For $Subfolder In $Folder.SubFolders
            If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
            _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    	Next
    EndFunc
    Alles anzeigen


    und hier die eigentliche Func

    C
    #include-once
    #include <array.au3>
    #include <GuiListview.au3>
    
    
    Func _MyArrayDisplay(Const ByRef $avArray, $sTitle = "Array: ListView Display", $sCols = 0, $iItemLimit = -1, $iTranspose = 0, $sSeparator = "", $sReplace = "|", $sHeader = "")
        If Not IsArray($avArray) Then Return SetError(1, 0, 0)
        $aCols = StringSplit($sCols, "|")
        ; Dimension checking
        Local $iDimension = UBound($avArray, 0), $iUBound = UBound($avArray, 1) - 1, $iSubMax = UBound($avArray, 2) - 1
        If $iDimension > 2 Then Return SetError(2, 0, 0)
    
    
        ; Separator handling
    ;~     If $sSeparator = "" Then $sSeparator = Chr(1)
        If $sSeparator = "" Then $sSeparator = Chr(124)
    
    
        ;  Check the separator to make sure it's not used literally in the array
        If _ArraySearch($avArray, $sSeparator, 0, 0, 0, 1) <> -1 Then
            For $x = 1 To 255
                If $x >= 32 And $x <= 127 Then ContinueLoop
                Local $sFind = _ArraySearch($avArray, Chr($x), 0, 0, 0, 1)
                If $sFind = -1 Then
                    $sSeparator = Chr($x)
                    ExitLoop
                EndIf
            Next
        EndIf
    
    
        ; Declare variables
        Local $vTmp, $iBuffer = 64
        Local $iColLimit = 250
        Local $iOnEventMode = Opt("GUIOnEventMode", 0), $sDataSeparatorChar = Opt("GUIDataSeparatorChar", $sSeparator)
    
    
        ; Swap dimensions if transposing
        If $iSubMax < 0 Then $iSubMax = 0
        If $iTranspose Then
            $vTmp = $iUBound
            $iUBound = $iSubMax
            $iSubMax = $vTmp
        EndIf
    
    
        ; Set limits for dimensions
        If $iSubMax > $iColLimit Then $iSubMax = $iColLimit
        If $iItemLimit < 1 Then $iItemLimit = $iUBound
        If $iUBound > $iItemLimit Then $iUBound = $iItemLimit
    
    
        ; Set header up
        If $sHeader = "" Then
            $sHeader = "Row  " ; blanks added to adjust column size for big number of rows
            For $i = 0 To $iSubMax
                $sHeader &= $sSeparator & "Col " & $i
            Next
        EndIf
    
    
        ; Convert array into text for listview
        Local $avArrayText[$iUBound + 1]
        For $i = 0 To $iUBound
            $avArrayText[$i] = "[" & $i & "]"
            For $j = 0 To $iSubMax
                ; Get current item
                If $iDimension = 1 Then
                    If $iTranspose Then
                        $vTmp = $avArray[$j]
                    Else
                        $vTmp = $avArray[$i]
                    EndIf
                Else
                    If $iTranspose Then
                        $vTmp = $avArray[$j][$i]
                    Else
                        $vTmp = $avArray[$i][$j]
                    EndIf
                EndIf
    
    
                ; Add to text array
                $vTmp = StringReplace($vTmp, $sSeparator, $sReplace, 0, 1)
                $avArrayText[$i] &= $sSeparator & $vTmp
    
    
                ; Set max buffer size
                $vTmp = StringLen($vTmp)
                If $vTmp > $iBuffer Then $iBuffer = $vTmp
            Next
        Next
        $iBuffer += 1
    
    
        ; GUI Constants
        Local Const $_ARRAYCONSTANT_GUI_DOCKBORDERS = 0x66
        Local Const $_ARRAYCONSTANT_GUI_DOCKBOTTOM = 0x40
        Local Const $_ARRAYCONSTANT_GUI_DOCKHEIGHT = 0x0200
        Local Const $_ARRAYCONSTANT_GUI_DOCKLEFT = 0x2
        Local Const $_ARRAYCONSTANT_GUI_DOCKRIGHT = 0x4
        Local Const $_ARRAYCONSTANT_GUI_EVENT_CLOSE = -3
        Local Const $_ARRAYCONSTANT_LVIF_PARAM = 0x4
        Local Const $_ARRAYCONSTANT_LVIF_TEXT = 0x1
        Local Const $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH = (0x1000 + 29)
        Local Const $_ARRAYCONSTANT_LVM_GETITEMCOUNT = (0x1000 + 4)
        Local Const $_ARRAYCONSTANT_LVM_GETITEMSTATE = (0x1000 + 44)
        Local Const $_ARRAYCONSTANT_LVM_INSERTITEMW = (0x1000 + 77)
        Local Const $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE = (0x1000 + 54)
        Local Const $_ARRAYCONSTANT_LVM_SETITEMW = (0x1000 + 76)
        Local Const $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT = 0x20
        Local Const $_ARRAYCONSTANT_LVS_EX_GRIDLINES = 0x1
        Local Const $_ARRAYCONSTANT_LVS_SHOWSELALWAYS = 0x8
        Local Const $_ARRAYCONSTANT_WS_EX_CLIENTEDGE = 0x0200
        Local Const $_ARRAYCONSTANT_WS_MAXIMIZEBOX = 0x00010000
        Local Const $_ARRAYCONSTANT_WS_MINIMIZEBOX = 0x00020000
        Local Const $_ARRAYCONSTANT_WS_SIZEBOX = 0x00040000
        Local Const $_ARRAYCONSTANT_tagLVITEM = "int Mask;int Item;int SubItem;int State;int StateMask;ptr Text;int TextMax;int Image;int Param;int Indent;int GroupID;int Columns;ptr pColumns"
    
    
        Local $iAddMask = BitOR($_ARRAYCONSTANT_LVIF_TEXT, $_ARRAYCONSTANT_LVIF_PARAM)
        Local $tBuffer = DllStructCreate("wchar Text[" & $iBuffer & "]"), $pBuffer = DllStructGetPtr($tBuffer)
        Local $tItem = DllStructCreate($_ARRAYCONSTANT_tagLVITEM), $pItem = DllStructGetPtr($tItem)
        DllStructSetData($tItem, "Param", 0)
        DllStructSetData($tItem, "Text", $pBuffer)
        DllStructSetData($tItem, "TextMax", $iBuffer)
    
    
        ; Set interface up
        Local $iWidth = 64, $iHeight = 480
        Local $hGUI = GUICreate($sTitle, $iWidth, $iHeight, Default, Default, BitOR($_ARRAYCONSTANT_WS_SIZEBOX, $_ARRAYCONSTANT_WS_MINIMIZEBOX, $_ARRAYCONSTANT_WS_MAXIMIZEBOX))
        Local $aiGUISize = WinGetClientSize($hGUI)
        Local $hListView = GUICtrlCreateListView($sHeader, 0, 0, $aiGUISize[0], $aiGUISize[1] - 26, $_ARRAYCONSTANT_LVS_SHOWSELALWAYS)
        Local $hCopy = GUICtrlCreateButton("Copy Selected", 3, $aiGUISize[1] - 23, $aiGUISize[0] - 6, 20)
        GUICtrlSetResizing($hListView, $_ARRAYCONSTANT_GUI_DOCKBORDERS)
        GUICtrlSetResizing($hCopy, $_ARRAYCONSTANT_GUI_DOCKLEFT + $_ARRAYCONSTANT_GUI_DOCKRIGHT + $_ARRAYCONSTANT_GUI_DOCKBOTTOM + $_ARRAYCONSTANT_GUI_DOCKHEIGHT)
        GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_GRIDLINES, $_ARRAYCONSTANT_LVS_EX_GRIDLINES)
        GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT, $_ARRAYCONSTANT_LVS_EX_FULLROWSELECT)
        GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETEXTENDEDLISTVIEWSTYLE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE, $_ARRAYCONSTANT_WS_EX_CLIENTEDGE)
    
    
        ; Fill listview
        Local $aItem
        For $i = 0 To $iUBound
            If GUICtrlCreateListViewItem($avArrayText[$i], $hListView) = 0 Then
                ; use GUICtrlSendMsg() to overcome AutoIt limitation
                $aItem = StringSplit($avArrayText[$i], $sSeparator)
                DllStructSetData($tBuffer, "Text", $aItem[1])
    
    
                ; Add listview item
                DllStructSetData($tItem, "Item", $i)
                DllStructSetData($tItem, "SubItem", 0)
                DllStructSetData($tItem, "Mask", $iAddMask)
                GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_INSERTITEMW, 0, $pItem)
    
    
                ; Set listview subitem text
                DllStructSetData($tItem, "Mask", $_ARRAYCONSTANT_LVIF_TEXT)
                For $j = 2 To $aItem[0]
                    DllStructSetData($tBuffer, "Text", $aItem[$j])
                    DllStructSetData($tItem, "SubItem", $j - 1)
                    GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_SETITEMW, 0, $pItem)
                Next
            EndIf
        Next
        ;************************************************************************************
        $iWidth = _GUICtrlListView_GetColumnWidth($hListView,0)
        $iColCount = _GUICtrlListView_GetColumnCount($hListView)
        ;ConsoleWrite($aCols)
        For $i = 1 To $iColCount - 1
            If IsArray($aCols) Then
                _GUICtrlListView_SetColumnWidth($hListView, $i, Number($aCols[$i]))
                ;ConsoleWrite($i & ": " & $aCols[$i])
                If $aCols[$i] = -1 Then
                    ;ConsoleWrite(" AutoSize")
                    _GUICtrlListView_SetColumnWidth($hListView, $i, $LVSCW_AUTOSIZE)
                EndIf
            EndIf
            $iWidth += _GUICtrlListView_GetColumnWidth($hListView,$i)
            ConsoleWrite(@CRLF)
        Next
        ;************************************************************************************
    
    
        #cs
        ; adjust window width
        $iWidth = 0
        For $i = 0 To $iSubMax + 1
            $iWidth += GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETCOLUMNWIDTH, $i, 0)
        Next
        #ce
    
    
        If $iWidth < 250 Then $iWidth = 230
        $iWidth += 20
    
    
        If $iWidth > @DesktopWidth Then $iWidth = @DesktopWidth - 100
    
    
        WinMove($hGUI, "", (@DesktopWidth - $iWidth) / 2, Default, $iWidth)
    
    
        ; Show dialog
        GUISetState(@SW_SHOW, $hGUI)
    
    
        While 1
            Switch GUIGetMsg()
                Case $_ARRAYCONSTANT_GUI_EVENT_CLOSE
                    ExitLoop
    
    
                Case $hCopy
                    Local $sClip = ""
    
    
                    ; Get selected indices [ _GUICtrlListView_GetSelectedIndices($hListView, True) ]
                    Local $aiCurItems[1] = [0]
                    For $i = 0 To GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMCOUNT, 0, 0)
                        If GUICtrlSendMsg($hListView, $_ARRAYCONSTANT_LVM_GETITEMSTATE, $i, 0x2) Then
                            $aiCurItems[0] += 1
                            ReDim $aiCurItems[$aiCurItems[0] + 1]
                            $aiCurItems[$aiCurItems[0]] = $i
                        EndIf
                    Next
    
    
                    ; Generate clipboard text
                    If Not $aiCurItems[0] Then
                        For $sItem In $avArrayText
                            $sClip &= $sItem & @CRLF
                        Next
                    Else
                        For $i = 1 To UBound($aiCurItems) - 1
                            $sClip &= $avArrayText[$aiCurItems[$i]] & @CRLF
                        Next
                    EndIf
                    ClipPut($sClip)
            EndSwitch
        WEnd
        GUIDelete($hGUI)
    
    
        Opt("GUIOnEventMode", $iOnEventMode)
        Opt("GUIDataSeparatorChar", $sDataSeparatorChar)
    
    
        Return 1
    EndFunc   ;==>_MyArrayDisplay
    Alles anzeigen

    Dateien

    Aufnahme2.png 18,37 kB – 0 Downloads
  • _Excel_BookAttach funktioniert in compilierter Form nicht (mehr)

    • ugt100
    • 20. März 2016 um 09:14

    Guten Morgen,

    wie versprochen hier meine weiteren Aktionen, um die Kuh doch noch vom Eis zu bekommen.

    Also mittels Windows TaskScheduler, habe ich es nicht hinbekommen (werde aber das Problem einem mir bekannten Windowsmenschen zum Testen geben)

    Meine Lösung ist jetzt mittels eines anderen Scheduler gelöst.
    Mit dem (portablen) FBTaskScheduler, der im Hintergrund läuft, funktioniert das Script (32Bit und 64it).

    Damit kann ich erst mal leben

    Gruss
    ugt100

  • _Excel_BookAttach funktioniert in compilierter Form nicht (mehr)

    • ugt100
    • 16. März 2016 um 21:34

    Guten Abend zusammen.

    also ich habe jetzt den Test sowohl mit einer 32Bit und einer 64bit kompilierten Version getestet.
    Das Ergebnis ist letztlich eindeutig - denn

    1 - beide exe Dateien sind ohne TaskScheduler ohne Fehler lauffähig - die funzen also
    2 - sobald der TaskScheduler ins Spiel kommt geht das nicht mehr - zumindest nicht beim Aufruf der jeweiligen exe.
    3 - Workaround - Aufruf der exe Datei mittels Batch File funktioniert leider auch nur ohne den TaskScheduler

    ....
    Start.Bat
    ....
    @Echo off
    Call "d:\....\PB_bkpNew32bit.exe"
    Exit

    soweit der Zwischenstand der Dinge.

    Ich teste weiter und berichte über die Schritte


    Danke nochmal für die schnelle erste Hilfe
    mfg
    ugt100

  • _Excel_BookAttach funktioniert in compilierter Form nicht (mehr)

    • ugt100
    • 16. März 2016 um 15:17

    Hi Waters

    OK das teste ich ....

    (aber I'm a little bit confused, weil das AutoIT Script ja ohne Schwierigkeiten funktioniert)

    Aber wenn das Nutzen der Funktion,des Rätsels Lösung ist, dann gerne.

    Melde mich - so hoffe ich - im Laufe des morgigen Tages


    Danke
    Gruss

    Chris

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™