_StringBetween, Zeilen durchnummerieren

  • Hallo,

    ich stehe im Moment auf dem schlauch.

    Mein Skript mach nur zum Teil was es soll.

    Die Zeilen werden nach dem auslesen aus dem Array so dargestellt.

    Ist Stand:

    1=D:\Documents\KeePass\Test.kdbx

    1=F:\Documents\KeePass\Test.kdbx

    Was muss ich tun um die Zahl um eins zu erhöhen?

    Soll:

    1=D:\Documents\KeePass\Test.kdbx

    2=F:\Documents\KeePass\Test.kdbx

    KeePass

    #include <Array.au3>

    #include<File.au3>

    #include <String.au3>

    Global $Ini = (@UserProfileDir & "\myBackupRestore\myBackup.ini")

    _KeePass()

    Func _KeePass()

    Global $sFilepath = $Ini

    ;~ Local Const $sFilepath = @UserProfileDir & "\mybackuprestore\mybackup.ini"

    Local $hFileOpen = FileOpen($sFilepath, $FO_READ)

    If $hFileOpen = -1 Then

    ;~ MsgBox($MB_SYSTEMMODAL, "", "Fehler beim lesen des Files.")

    Return False

    EndIf

    Local $sFileRead = FileRead($hFileOpen)

    FileClose($hFileOpen)

    ;

    Local $BetweenArray = _StringBetween($sFileRead, "[KeePass]", "[Lizenzvereinbarung]")

    ; Inhalt zwischen [KeePass] und [Lizenzvereinbarung ersetzen.

    Local $sNewString = StringReplace($sFileRead, $BetweenArray[0], @CRLF & "")

    FileDelete($Ini)

    Local $WriteIni = FileWrite($Ini, $sNewString)

    FileClose($WriteIni)

    Local Const $sFilepath = @AppDataDir & "\KeePass\KeePass.config.xml"

    if FileExists($sFilepath) Then

    IniWrite($Ini, "Quellen", "39", @AppDataDir & '\KeePass')

    Else

    IniWrite($Ini, "Quellen", "39", "")

    EndIf

    Local $hFileOpen = FileOpen($sFilepath, $FO_READ)

    If $hFileOpen = -1 Then

    ;~ MsgBox($MB_SYSTEMMODAL, "", "Fehler beim lesen des Files.")

    Return False

    EndIf

    Local $sFileRead = FileRead($hFileOpen)

    FileClose($hFileOpen)

    Local $BetweenArray = _StringBetween($sFileRead, "<Path>", "</Path>", $STR_ENDISSTART)

    For $index = 0 To _ArrayMaxIndex($BetweenArray)

    Local $kdbx = $BetweenArray[$index]

    ;~ _ArraySort($BetweenArray)

    ;~ _ArrayDisplay($BetweenArray)

    $aArrayUnique = _ArrayUnique($BetweenArray) ; Use default parameters to create a unique array of the first column.

    ;~ _ArrayDisplay($aArrayUnique, "$aArray first column") ; Display the unique array.

    ;~ MsgBox($MB_SYSTEMMODAL, "$aArrayUnique ", _ArrayToString($aArrayUnique, @CRLF))

    Local $sFill = ""

    For $i = 0 To $aArrayUnique

    $i = $i + 1

    ;~ For $j = 0 To ubound($BetweenArray[$index])

    ;~ msgbox(0,"$I " ,$i & "=" & $kdbx)

    ;~ $j = $j + 1

    $sFill &= $i & "=" & $kdbx & @CRLF

    ;~ $sFill &= $i + 1 & "=" & $kdbx & @CRLF

    Next

    ;~ next

    ConsoleWrite($sFill)

    Next

    EndFunc ;==>_KeePass


    KeePass.config.xml

    Spoiler anzeigen

    <?xml version="1.0" encoding="utf-8"?>

    <Configuration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <Meta>

    <PreferUserConfiguration>false</PreferUserConfiguration>

    <OmitItemsWithDefaultValues>true</OmitItemsWithDefaultValues>

    </Meta>

    <Application>

    <LastUpdateCheck>2018-10-07T09:38:02Z</LastUpdateCheck>

    <LastUsedFile>

    <Path>D:\Documents\KeePass\Test.kdbx</Path>

    <Path>F:\Documents\KeePass\Test.kdbx</Path>

    <CredProtMode>Obf</CredProtMode>

    <CredSaveMode>NoSave</CredSaveMode>

    </LastUsedFile>

    <MostRecentlyUsed>

    <MaxItemCount>12</MaxItemCount>

    <Items>

    <ConnectionInfo>

    <Path>D:\Documents\KeePass\Test.kdbx</Path>

    <CredProtMode>Obf</CredProtMode>

    <CredSaveMode>NoSave</CredSaveMode>

    </ConnectionInfo>

    </Items>

    </MostRecentlyUsed>

    <WorkingDirectories>

    <Item>Database@D:\Documents\KeePass</Item>

    <Item>Import@D:\Documents</Item>

    </WorkingDirectories>

    <Start>

    <CheckForUpdate>true</CheckForUpdate>

    <CheckForUpdateConfigured>true</CheckForUpdateConfigured>

    </Start>

    <FileOpening />

    <FileClosing />

    <TriggerSystem>

    <Triggers />

    </TriggerSystem>

    </Application>

    <Logging />

    <MainWindow>

    <X>595</X>

    <Y>896</Y>

    <Width>1877</Width>

    <Height>1041</Height>

    <SplitterHorizontalFrac>0.8333</SplitterHorizontalFrac>

    <SplitterVerticalFrac>0.25</SplitterVerticalFrac>

    <Layout>Default</Layout>

    <ToolBar />

    <EntryView />

    <TanView />

    <EntryListColumnCollection>

    <Column>

    <Type>Title</Type>

    <Width>166</Width>

    </Column>

    <Column>

    <Type>UserName</Type>

    <Width>166</Width>

    </Column>

    <Column>

    <Type>Password</Type>

    <Width>166</Width>

    <HideWithAsterisks>true</HideWithAsterisks>

    </Column>

    <Column>

    <Type>Url</Type>

    <Width>166</Width>

    </Column>

    <Column>

    <Type>Notes</Type>

    <Width>166</Width>

    </Column>

    </EntryListColumnCollection>

    <EntryListColumnDisplayOrder>0 1 2 3 4</EntryListColumnDisplayOrder>

    <ListSorting>

    <Order>Ascending</Order>

    </ListSorting>

    </MainWindow>

    <UI>

    <TrayIcon />

    <Hiding />

    <StandardFont>

    <Family>Microsoft Sans Serif</Family>

    <Size>8.25</Size>

    <GraphicsUnit>Point</GraphicsUnit>

    <Style>Regular</Style>

    <OverrideUIDefault>false</OverrideUIDefault>

    </StandardFont>

    <PasswordFont>

    <Family>Courier New</Family>

    <Size>8.25</Size>

    <GraphicsUnit>Point</GraphicsUnit>

    <Style>Regular</Style>

    <OverrideUIDefault>false</OverrideUIDefault>

    </PasswordFont>

    <BannerStyle>WinVistaBlack</BannerStyle>

    <DataEditorFont>

    <Family>Microsoft Sans Serif</Family>

    <Size>8.25</Size>

    <GraphicsUnit>Point</GraphicsUnit>

    <Style>Regular</Style>

    <OverrideUIDefault>false</OverrideUIDefault>

    </DataEditorFont>

    <UIFlags>0</UIFlags>

    <KeyCreationFlags>0</KeyCreationFlags>

    <KeyPromptFlags>0</KeyPromptFlags>

    </UI>

    <Security>

    <WorkspaceLocking>

    <LockAfterTime>0</LockAfterTime>

    <LockAfterGlobalTime>0</LockAfterGlobalTime>

    </WorkspaceLocking>

    <Policy />

    <MasterPassword>

    <MinimumLength>0</MinimumLength>

    <MinimumQuality>0</MinimumQuality>

    </MasterPassword>

    </Security>

    <Native />

    <PasswordGenerator>

    <AutoGeneratedPasswordsProfile>

    <GeneratorType>CharSet</GeneratorType>

    <Length>20</Length>

    <CharSetRanges>ULD_______</CharSetRanges>

    </AutoGeneratedPasswordsProfile>

    <LastUsedProfile>

    <GeneratorType>CharSet</GeneratorType>

    <Length>20</Length>

    <CharSetRanges>ULD_______</CharSetRanges>

    </LastUsedProfile>

    <UserProfiles />

    </PasswordGenerator>

    <Defaults>

    <OptionsTabIndex>0</OptionsTabIndex>

    <SearchParameters>

    <ComparisonMode>InvariantCultureIgnoreCase</ComparisonMode>

    </SearchParameters>

    <KeySources />

    </Defaults>

    <Integration>

    <HotKeyGlobalAutoType>393281</HotKeyGlobalAutoType>

    <HotKeySelectedAutoType>0</HotKeySelectedAutoType>

    <HotKeyShowWindow>393291</HotKeyShowWindow>

    <HotKeyEntryMenu>0</HotKeyEntryMenu>

    <UrlSchemeOverrides>

    <BuiltInOverridesEnabled>1</BuiltInOverridesEnabled>

    <CustomOverrides />

    </UrlSchemeOverrides>

    <ProxyType>System</ProxyType>

    <ProxyAuthType>Auto</ProxyAuthType>

    </Integration>

    <Custom />

    </Configuration>

  • Hab es jetzt nur kurz überflogen aber deine schleife sollte so aussehen.

    Code
    For $i = 0 To ubound($aArrayUnique) -1 Step +1

    Und ConsoleWrite($sFill) gehört in die Schleife rein.

    Code
    ConsoleWrite($sFill)
    
        Next
    Next

    Einmal editiert, zuletzt von Kizum (13. Oktober 2018 um 19:45)

  • Kizum, funktioniert nicht, auch weil ubound , die werte aus _ArrayUnique multipliziert.

    Sieht dann so aus:

    1=D:\Documents\KeePass\Test.kdbx

    1=D:\Documents\KeePass\Test.kdbx

    3=D:\Documents\KeePass\Test.kdbx

    1=F:\Documents\KeePass\Test.kdbx

    1=F:\Documents\KeePass\Test.kdbx

    3=F:\Documents\KeePass\Test.kdbx

    Es ist egal ob ConsoleWrite sich innerhalb oder außerhalb der schleife befindet, die werte sind die gleichen.

  • mitac100

    Der erste Hinweis von Kizum war aber auf jeden Fall richtig - auch wenn man Step weglassen kann.

    Du willst einmal die Pfade aus der config auslesen, mit _ArrayUnique erstellst du dann ein Array, das alle Pfade nur einmal enthält und willst mit diesem Array weiterarbeiten. Habe ich das richtig verstanden?

    Dann solltest du _ArrayUnique vor der Schleife ausführen und mit diesem Array arbeiten, statt mit $BetweenArray.

    Grüße autoiter

  • Ich blicke da nicht so ganz durch... du hast zwar die Datei KeePass.config.xml in den Spoiler gelegt, aber die Datei myBackup.ini fehlt und insgesamt ist dein Script eine einzige Katastrophe. ;)

    Erkläre doch einfach mal mit Worten, was genau du machen willst... dann helfe ich dir auch gerne dabei.

  • Falls ich dein Problem (alle Dateipfade aus XML auslesen) richtig verstanden habe. würde ich so abändern:

    die Dateipfade mußt du nochmal prüfen und evtl. anpassen, denn ich verteile Daten von Tetsjripten ungern auf verschiedene Verzeichnisse.

  • @Bitnugger, habe das Skript zum besseren Verständnis gekürzt bzw. leicht angepasst. Bitrag von Alpines. Array - _ArrayInsert - Bitnugger

    Es geht einzig darum vor dem Pfad einen Key für die weitere Bearbeitung in der Ini zu setzen.

    autoBert, das funktioniert leider nicht. Es geht um die Keys.

    Spoiler anzeigen

    #include <Array.au3>

    #include<File.au3>

    #include <String.au3>

    $sFileName = "KeePass.config.txt"

    ;~ $sFileName = "KeePass.config.txt"

    $hFilehandle = _Filecreate(@ScriptDir & "\" & $sFileName)

    $sFilePath = @ScriptDir & "\" & $sFileName

    $hFileOpen = FileOpen($sFilePath, $FO_APPEND)

    If $hFileOpen = -1 Then

    Return False

    EndIf

    FileWrite($hFilehandle, "" & @CRLF)

    FileWrite($hFilehandle, "<Path>D:\Documents\KeePass\Test.kdbx</Path>" & @CRLF)

    FileWrite($hFilehandle, "<Path>D:\Documents\KeePass\Test.kdbx</Path>" & @CRLF)

    FileWrite($hFilehandle, "<Path>F:\Documents\KeePass\Test.kdbx</Path>" & @CRLF)

    FileClose($hFilehandle)

    $hFileOpen = FileOpen($sFilePath)

    $sFileRead = FileRead($hFileOpen)

    FileClose($hFileOpen)

    Local $BetweenArray = _StringBetween($sFileRead, "<Path>", "</Path>", $STR_ENDISSTART)

    Local $aFile = $BetweenArray

    Local $i = 0

    While $i < UBound($aFile)

    If StringLeft ( ($aFile[$i]) , 1 ) = '' Then

    ;~ _ArrayInsert ( $aFile, "1=" & $i + 1, "Test " & StringRight ( $aFile[$i] , StringLen ( $aFile[$i] ) - 1 ) )

    $i += 1

    EndIf

    $i += 1

    WEnd

    _ArrayDisplay ( $aFile , "kdbx" )

    $aArrayUnique = _ArrayUnique($aFile) ;

    $Kdbx= _ArrayToString($aArrayUnique, @CRLF)

    MsgBox($MB_SYSTEMMODAL, "$aArrayUnique ", "Ist: " & @CRLF & $Kdbx & @CRLF & @CRLF & "Ergebnis soll sein: " & @CRLF & _

    "1=D:\Documents\KeePass\Test.kdbx" & @CRLF & "2=F:\Documents\KeePass\Test.kdbx" & @CRLF & @CRLF & _

    "Wie muss ich in den Code schreiben damit die Keys erzeugt werden?")

  • Hallo mitac100

    das ist fast Arbeitsverweigerung, was du machst, wenn es dir wirklich nur darum geht eine Nummer vor jeden String einzufügen.

    Füge in dein Skript aus deinem letzten Beitrag unter der Zeile $aArrayUnique = _ArrayUnique($aFile) mal folgendes ein:

    AutoIt
    For $i = 1 To $aArrayUnique[0]
        $aArrayUnique[$i] = $i & "=" & $aArrayUnique[$i]
    Next

    Grüße autoiter

  • wenn es dir wirklich nur darum geht eine Nummer vor jeden String einzufügen.

    Hehe... und ich habe ihn so verstanden, dass er nur bei den Zeilen mit den Pfaden eine Nummer einfügen will und nicht bei allen Zeilen.

    Egal, hier noch ein kleines Script mit dem genau dies geht - nur bei den Zeilen mit den Pfaden eine Nummer einfügen.

    und hier noch eins...

    Einmal editiert, zuletzt von Bitnugger (15. Oktober 2018 um 03:28)