Bezieht sich #include_once nur auf die nächste #include-Anweisung oder auf alle folgenden?
Weder noch!
Zitat aus der Hilfe:
#include-once
Specifies that the current file should only be included once.
Bezieht sich #include_once nur auf die nächste #include-Anweisung oder auf alle folgenden?
Weder noch!
Zitat aus der Hilfe:
#include-once
Specifies that the current file should only be included once.
Ja: 42 ![]()
Im Ernst: Wie sollen wir eine Erklärung dazu abgeben, ohne die Scripte zu kennen?
Du wirst nicht darum herum kommen die Scripte hier zu posten, wenn Dir an einer Lösung gelegen ist.
Der Reihe nach:
- Die For...Next-Schleife muss rückwärts (vom höchsten Wert nach Null) durchlaufen werden, damit beim löschen der Array-Einträge nicht alles "nach vorne rutscht" und dadurch einen Array-Fehler auslöst.
- Die Abfrage der Buttons sollte immer mit BitAnd passieren, da so ein Button mehrere Status haben kann. Mit BitAnd wird eine logische Bit-Verknüpfung des Status mit $GUI_CHECKED durchgeführt. Als Ergebnis erhält man Null oder den Wert von $GUI_CHECKED. Genau genommen müsste man jetzt noch einen Vergleich mit $GUI_CHECKED machen, um TRUE oder FALSE zu erhalten. AutoIt interpretiert aber Null als FALSE und jeden anderen Wert als TRUE, weshalb man hier (If-Anweisung) das "= $GUI_CHECKED" weglassen kann.
- Die Werte, die beim erstellen der Buttons zurückgeliefert werden, sind die Control-IDs der jeweiligen Buttons. Damit kann man dann Änderungen vornehmen oder den Status auslesen. Wenn Du aber den Text des Buttons auslesen willst, dann über ControlGetText.
In Deinem Script befinden sich diverse Fehler!
Als Erstes aber der Hinweis, dass Du für die Radio-Button gleich Arrays verwenden solltest, dann ersparst Du Dir eine Menge Code.
Aber um bei Deinem Script zu bleiben:
1. Du "addierst" Strings zu Deinem Array ($atb_all) und nicht den Wert (die Control-ID) der Variablen. Der wäre aber erforderlich, um den Status der Radiobuttons auszulesen.
2. Beim "löschen" der Array-Einträge gehst Du vorwärts durch das Array, das führt aber zwangsläufig zum Abbruch des Scripts, weil der Array-Bereich überschritten wird.
Ich habe mal ein paar Änderungen vorgenommen, sodass es wie gewünscht funktioniert (schöner wäre es gleich mit Arrays s.o. zu arbeiten):
; Testformular
#Region INCLUDE
#include <GUIScrollbars_Ex.au3> ; <=== nicht im Standardpaket von Autoit enthalten
#include <WindowsConstants.au3>
#include <string.au3>
#include <Array.au3>
#EndRegion INCLUDE
#Region GUI Setting variables
Global $iMsg
Global $iMax_x_Scroll = 419 ; Scrollbreite (wenn Wert kleiner als Fensterbreite, dann keine Scrollbar)
Global $iMax_y_Scroll
Global $hGUI ; zum Abfragen der GUI
#EndRegion GUI Setting variables
#Region other variables
Global $allgemein
Global $vorwort
Global $thema1
Global $thema2
Global $thema3
Global $thema4
Global $header_thema3_block1
Global $thema3_unterpunkt1
Global $thema3_unterpunkt2
Global $thema3_unterpunkt3
Global $header_thema3_block2
Global $thema3_unterpunkt4
Global $thema3_unterpunkt5
Global $thema3_unterpunkt6
Global $header_thema4_block1
Global $thema3_unterpunkt1
Global $thema4_unterpunkt1
Global $thema4_unterpunkt2
Global $iMax_x_Scroll = 419 ; Scrollbreite (wenn Wert kleiner als Fensterbreite, dann keine Scrollbar)
Global $iMax_y_Scroll
#EndRegion other variables
_CreateWin()
_writecontend()
_CollectThemes()
_ShowArray()
_WaitForInput()
Func _CreateWin()
; Fenster mit Scrollbalken, skalierbar
$hGUI = GUICreate("Test-Formular", 440, 600, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX), $WS_EX_ACCEPTFILES) ; Skalierbares Fenster + Drag and Drop
GUISetBkColor(0xeeeeee)
_GUIScrollbars_Generate($hGUI, $iMax_x_Scroll, $iMax_y_Scroll) ; Erzeuge Scrollbars mit GUIScrollbars_Ex.au3
EndFunc ;==>_CreateWin()
Func _writecontend()
$allgemein=GUICtrlCreateCheckbox("Allgemein",10,30,365)
GUICtrlSetResizing($allgemein, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$vorwort=GUICtrlCreateCheckbox("Vorwort",10,50,365)
GUICtrlSetResizing($vorwort, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$header1= GUICtrlCreateGroup("Überschrift 3/4", 10, 230, 395,66)
GUICtrlSetResizing($header1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema3=GUICtrlCreateRadio("Thema 3",28,246,365)
GUICtrlSetResizing($thema3, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema4=GUICtrlCreateRadio("Thema 4",28,266,365)
GUICtrlSetResizing($thema4, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$header_thema3_block1= GUICtrlCreateGroup("Überschrift Thema 3 Block 1", 10, 298, 395,88)
GUICtrlSetResizing($header_thema3_block1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema3_unterpunkt1=GUICtrlCreateRadio("Thema 3 Unterpunkt 1",28,314,365)
GUICtrlSetResizing($thema3_unterpunkt1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema3_unterpunkt2=GUICtrlCreateRadio("Thema 3 Unterpunkt 2",28,334,365)
GUICtrlSetResizing($thema3_unterpunkt2, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema3_unterpunkt3=GUICtrlCreateRadio("Thema 3 Unterpunkt 3",28,354,365)
GUICtrlSetResizing($thema3_unterpunkt3, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$header_thema3_block2= GUICtrlCreateGroup("Überschrift Thema 3 Block 2", 10, 386, 395,88)
GUICtrlSetResizing($header_thema3_block2, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema3_unterpunkt4=GUICtrlCreateRadio("Thema 3 Unterpunkt 4",28,402,365)
GUICtrlSetResizing($thema3_unterpunkt4, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema3_unterpunkt5=GUICtrlCreateRadio("Thema 3 Unterpunkt 5",28,422,365)
GUICtrlSetResizing($thema3_unterpunkt5, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema3_unterpunkt6=GUICtrlCreateRadio("Thema 3 Unterpunkt 6",28,442,365)
GUICtrlSetResizing($thema3_unterpunkt6, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$header_thema4_block1= GUICtrlCreateGroup("Überschrift Thema 4 Block 1", 10, 474, 395,66)
GUICtrlSetResizing($header_thema4_block1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema4_unterpunkt1=GUICtrlCreateRadio("Thema 4 Unterpunkt 1",28,490,365)
GUICtrlSetResizing($thema4_unterpunkt1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
$thema4_unterpunkt2=GUICtrlCreateRadio("Thema 4 Unterpunkt 2",28,510,365)
GUICtrlSetResizing($thema4_unterpunkt2, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
Global $idButtonMake = GUICtrlCreateButton("Gehe zum nächsten Programm", 10, 646, 230, 20)
GUICtrlSetResizing($idButtonMake, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKSIZE) ; Position und Groesse fix zu Top und Left
GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group
$iMax_y_Scroll = 626+ 30 ; Hoehe fuer Scrollbereich
_GUIScrollbars_Generate($hGUI, $iMax_x_Scroll, $iMax_y_Scroll) ; erneute Erzeugung Scrollbars mit angepasster Hoehe
GUISetState()
EndFunc ;==> _writecontend()
Func _CollectThemes()
; Erzeuge $atb_all mit allen verwendeten Themenpunkten
Global $atb_all[1]
_ArrayAdd($atb_all, $allgemein)
_ArrayAdd($atb_all, $vorwort)
_ArrayAdd($atb_all, $thema1)
_ArrayAdd($atb_all, $thema2)
_ArrayAdd($atb_all, $thema3)
_ArrayAdd($atb_all, $thema4)
_ArrayAdd($atb_all, $thema3_unterpunkt1)
_ArrayAdd($atb_all, $thema3_unterpunkt2)
_ArrayAdd($atb_all, $thema3_unterpunkt3)
_ArrayAdd($atb_all, $thema3_unterpunkt4)
_ArrayAdd($atb_all, $thema3_unterpunkt5)
_ArrayAdd($atb_all, $thema3_unterpunkt6)
_ArrayAdd($atb_all, $thema4_unterpunkt1)
_ArrayAdd($atb_all, $thema4_unterpunkt2)
; Ergebnis: alle Themenbereiche des Formulars sind in Array "$atb_all" enthalten
EndFunc ; ==> _CollectThemes()
Func _WaitForInput()
; Abfrage von Events
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $thema3
If GUICtrlRead($thema3) = $GUI_CHECKED Then
GUICtrlSetState($thema3_unterpunkt1, $GUI_ENABLE)
GUICtrlSetState($thema3_unterpunkt2, $GUI_ENABLE)
GUICtrlSetState($thema3_unterpunkt3, $GUI_ENABLE)
GUICtrlSetState($thema3_unterpunkt4, $GUI_ENABLE)
GUICtrlSetState($thema3_unterpunkt5, $GUI_ENABLE)
GUICtrlSetState($thema3_unterpunkt6, $GUI_ENABLE)
GUICtrlSetState($thema4_unterpunkt1, $GUI_DISABLE)
GUICtrlSetState($thema4_unterpunkt2, $GUI_DISABLE)
EndIf
Case $thema4
If GUICtrlRead($thema4) = $GUI_CHECKED Then
GUICtrlSetState($thema3_unterpunkt1, $GUI_DISABLE)
GUICtrlSetState($thema3_unterpunkt2, $GUI_DISABLE)
GUICtrlSetState($thema3_unterpunkt3, $GUI_DISABLE)
GUICtrlSetState($thema3_unterpunkt4, $GUI_DISABLE)
GUICtrlSetState($thema3_unterpunkt5, $GUI_DISABLE)
GUICtrlSetState($thema3_unterpunkt6, $GUI_DISABLE)
GUICtrlSetState($thema4_unterpunkt1, $GUI_ENABLE)
GUICtrlSetState($thema4_unterpunkt2, $GUI_ENABLE)
EndIf
Case $idButtonMake
; Formular auswerten und LAH starten
_askformular()
ExitLoop
EndSwitch
WEnd
Exit
EndFunc ;==>_WaitForInput()
Func _ShowArray()
; dieses Unterprogramm dient nur der temporaeren Anzeige des Arrays
_ArrayDisplay($atb_all, 'Zwischenstand: alle Check- und Radiobuttons' )
EndFunc ;====> _ShowArray()
Func _AskFormular()
; Nicht angewaehlte Themenpunkte im Formular aussortieren und im Array "$atb_all" loeschen
Local $i = 0
;MsgBox(4096, 'Ubound', Ubound($atb_all, 1)-1)
;~ While $i < Ubound($atb_all, 1)
;~ $i = $i + 1
;~ If GUICtrlRead($atb_all[$i]) <> 1 Then
;~ _ArrayDelete($atb_all, $i)
;~ $i = $i - 1 ; Zaehler um 1 verkleinern, weil eine Zeile geloescht wurde und nun alle folgenden Zeilen hochrutschen
;~ Endif
;~ WEnd
For $i = UBound($atb_all) - 1 To 0 Step -1
If Not BitAND(GUICtrlRead($atb_all[$i]), $GUI_CHECKED) Then
_ArrayDelete($atb_all, $i)
EndIf
Next
_ArrayDisplay($atb_all, 'Nur aktivierte Boxen?' )
Local $aTmp[UBound($atb_all)]
For $i = 0 To UBound($atb_all) - 1
$aTmp[$i] = ControlGetText($hGUI, '', $atb_all[$i])
Next
_ArrayDisplay($aTmp, 'Inhalt der aktivierten Boxen?' )
EndFunc ;====> _AskFormular()
Alles anzeigen
Wenn Du das flackern verhindern willst, dann benutze einfach eine zusätzliche Variable, um abzufragen, ob der Status bereits geändert wurde:
Global $iExistCheck = True
While Sleep(10)
If ProcessExists("notepad.exe") Then
If Not $iExistCheck Then
$iExistCheck = True
GUICtrlSetData($wachen, "läuft")
GUICtrlSetBkColor($wachen, 0x00FF00)
EndIf
Else
If $iExistCheck Then
$iExistCheck = False
GUICtrlSetData($wachen, "läuft nicht")
GUICtrlSetBkColor($wachen, 0xFF0000)
EndIf
EndIf
WEnd
Alles anzeigen
Dann brauchst Du den zusätzlichen Sekunden-Sleep nicht und kannst sogar den Sleep in der Endlosschleife verringern (falls da noch mehr passieren soll).
Den Sinn dahinter verstehe ich auch nicht.
Es ist doch, im Gegenteil, von Vorteil, wenn man Programm und Daten voneinander trennt.
So kann man viel besser Backups der Daten machen, die dann auch nicht durch das Programm aufgebläht gespeichert werden müssen.
Also entweder die Datenbank in ein Unterverzeichnis des Programmverzeichnisses (für eine mobile Version) oder in ein Verzeichnis im Anwendungsordner der Benutzers (für eine installierte Version).
Abspeichern in die Programm-Exe würde ich auf keinen Fall empfehlen.
Das lesen der Inidatei muss ja fehlschlagen.
FileOpenDialog ändert (bei Erfolg) das @WorkingDir. Die Inidatei wird also im ausgewählten Verzeichnis gespeichert.
Und da Du bei der Inidatei keinen Pfad angegeben hast, wird nur im @ScriptDir (bei Programmstart ist das das @WorkingDir) danach gesucht.
Beim lesen/schreiben der Inidatei immer den ganzen Pfad angeben: IniRead(@ScriptDir & "\Setups.ini", ...)
Das eigentlich programmiertechnisch Interessante war dabei, dass es nicht immer aufgeht, wenn man die Namen der Reihe nach zuweist. Jetzt (im Nachhinein) ist mir klar, warum. Aber erstmal wunderte ich mich.
Wenn (in meinem Beispiel) für den letzten Namen (Hilde) nur noch Hilde im Auslosungs-"Topf" ist. Deshalb habe ich um das Ganze noch eine Repeat-Schleife gelegt, um in dem Fall eine neue Auslosung zu starten.
Wenn man sich auch selbst "bewichteln" kann, dann ist die Lösung viel einfacher.
Aber so hatte das Script für mich etwas Interessantes als Nebenprodukt gebracht.
Dann kann es ja nicht schaden, wenn Du noch eine Lösung bekommst.
Hier mal meine Variante:
#include <GUIConstantsEx.au3>
Global $aWichtelnamen = ['Andreas', 'Barbara', 'Cornelia', 'Doris', 'Ernst', 'Fred', 'Gustav', 'Hilde']
Global $iCount = UBound($aWichtelnamen), $aidWichtellabel[$iCount][2]
Opt('GUIOnEventMode', 1)
Global $hGui = GUICreate('Wichtelgenerator', 420, 70 + $iCount * 30)
GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
For $i = 0 To $iCount - 1
$aidWichtellabel[$i][0] = GUICtrlCreateLabel($aWichtelnamen[$i], 20, 20 + $i * 30, 160, 25)
GUICtrlSetFont(-1, 16, 400, 0, 'Times New Roman')
GUICtrlSetBkColor(-1, 0xAAAAFF)
GUICtrlCreateLabel('->', 190, 20 + $i * 30, 160, 25)
GUICtrlSetFont(-1, 16, 800, 0, 'Courier New')
$aidWichtellabel[$i][1] = GUICtrlCreateLabel('', 235, 20 + $i * 30, 160, 25)
GUICtrlSetFont(-1, 16, 400, 0, 'Times New Roman')
GUICtrlSetBkColor(-1, 0xFFDDAA)
Next
GUICtrlCreateButton('Wichteln', 150, 30 + $iCount * 30, 120, 25)
GUICtrlSetOnEvent(-1, '_Wichteln')
GUISetState(@SW_SHOW, $hGui)
WinWaitClose($hGui)
Exit
Func _Wichteln()
Local $aTmp = $aWichtelnamen, $iRnd = 0, $iErr = 0, $iRepeat = 0
SRandom(@MSEC)
For $i = 0 To $iCount - 1
GUICtrlSetData($aidWichtellabel[$i][1], '')
Next
Do
$iRepeat = 0
For $i = 0 To $iCount - 1
$iErr = 0
While True
$iRnd = Random(0, $iCount - 1 - $i, 1)
If $aWichtelnamen[$i] <> $aTmp[$iRnd] Then ExitLoop
$iErr += 1
If $iErr > $iCount - $i Then
$iRepeat = 1
ExitLoop
EndIf
WEnd
GUICtrlSetData($aidWichtellabel[$i][1], $aTmp[$iRnd])
_Switch($aTmp[$iRnd], $aTmp[$iCount - 1 - $i])
Next
Until Not $iRepeat
EndFunc ;==>_Wichteln
Func _Switch(ByRef $a, ByRef $b)
Local $c = $a
$a = $b
$b = $c
EndFunc ;==>_Switch
Func _CloseGui()
GUIDelete($hGui)
EndFunc ;==>_CloseGui
Alles anzeigen
Das Problem tritt auf, weil Du nach den Einträgen (versehentlich) noch TABs eingefügt hast.
Wenn die nicht wären, dann würde es funktionieren.
Ich habe jetzt aber noch eine Überprüfung eingebaut. Es werden beim einlesen einfach alle TABs entfernt und danach werden erst die Daten ausgewertet.
Außerdem gab es noch einen kleinen Bug beim ermitteln der installierten Programme. Die Zeile "$err = 0" musste in die For...Next-Schleife.
Im Anhang findest Du die neue Version.
Es gibt in der Listview-UDF einige Funktionen, die nur mit dem Handle (richtig) funktionieren.
Wenn Du dort die Control-ID (Rückgabe von GUICtrlCreateListView) übergibst, funktioniert es nicht oder nur fehlerhaft.
Ich habe mir deshalb angewöhnt, beim benutzen von Funktionen aus der Listview-UDF diese immer mit dem Handle "GUICtrlGetHandle($idListview)" aufzurufen.
Deshalb funktioniert auch Dein Beispiel mit dem Handle:
#include <GuiListView.au3>
Example()
Func Example()
Local $idListview
GUICreate("ListView Ensure Visible", 400, 400)
$idListview = GUICtrlCreateListView("Items", 2, 2, 394, 268)
$hListview = GUICtrlGetHandle($idListview)
$forward = GUICtrlCreateButton("Vorwärts", 10, 320, 100, 40)
$backward = GUICtrlCreateButton("Rückwärts", 120, 320, 100, 40)
_GUICtrlListView_SetColumnWidth($hListview, 0, 100)
_GUICtrlListView_SetExtendedListViewStyle($hListview, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUISetState(@SW_SHOW)
_GUICtrlListView_BeginUpdate($hListview)
For $i = 1 To 200
GUICtrlCreateListViewItem("Item " & $i, $idListview)
Next
_GUICtrlListView_EndUpdate($hListview)
Local $sItems = "1|29|70|108|186" ; Die Items zu denen ich springen möchte
Local $iListposition = 1
Do
$msg = GUIGetMsg()
Select
Case $msg = $forward
$aItems = StringSplit($sItems, "|") ; $aItems[0] beeinhaltet die Anzahl der gefundenen Strings.
If $iListposition = $aItems[0] Then
$iListposition = 1
Else
$iListposition += 1
EndIf
ConsoleWrite($aItems[$iListposition] & @CRLF)
_GUICtrlListView_EnsureVisible($hListview, $aItems[$iListposition])
Case $msg = $backward
$aItems = StringSplit($sItems, "|")
If $iListposition = 1 Then
$iListposition = $aItems[0]
Else
$iListposition -= 1
EndIf
ConsoleWrite($aItems[$iListposition] & @CRLF)
_GUICtrlListView_EnsureVisible($hListview, $aItems[$iListposition])
EndSelect
Until $msg = -3
EndFunc ;==>Example
Alles anzeigen
Beispiel.: Keine Funktionen in Schleifen-Header verwenden wie z.B. UBound. Wenn wir uns das Ergebnis vorher in einer Variable speichern brauchen wir zwar mehr Speicher aber rufen dafür nicht in jedem Durchlauf die Funktion auf.
Hmm...dafür sah ich bisher keine Notwendigkeit, weil ich davon ausgegangen bin, dass der Compiler/Interpreter sowas sowieso in einer Konstanten ablegt.
Mal testen:
Global $a[100000]
$iTimer = TimerInit()
For $i = 0 To UBound($a) - 1
Next
ConsoleWrite('mit Ubound (ms): ' & TimerDiff($iTimer) & @CRLF)
$iTimer = TimerInit()
$iCount = UBound($a) - 1
For $i = 0 To $iCount
Next
ConsoleWrite('ohne Ubound (ms): ' & TimerDiff($iTimer) & @CRLF)
Alles anzeigen
Die Ergebnisse schwanken im zweiten Nachkommabereich:
mit Ubound (ms): 2.84083678003
ohne Ubound (ms): 2.83059689462309
mit Ubound (ms): 2.86014627822588
ohne Ubound (ms): 2.88238145796659
Im Rahmen der Messgenauigkeit würde ich sagen: Unentschieden.
Das bestätigt eher meine Theorie (Compiler-/Interpreterarbeit) von oben.
Vorsicht mit Ini-Dateien!
Only the first 32767 chars are read for legacy reasons.
Und zu FileCopy: Ich kenne das auch nur als blockierend. Also, dass AutoIt auf das Ende des Kopiervorgangs wartet.
Das war ja auch der Grund, warum ich _FileCopyEx (Link in Post#8 von Chip) geschrieben habe.
diese Eintrag wird nicht abgefragt, werden Leerstellen berücksichtigt?
Es wird immer der ganze Pfad bis zum Zeilenende berücksichtigt.
Kann es aber vielleicht sein, dass das der letzte Eintrag in der Datei ist und Du vergessen hast, nach der URL einen Zeilenumbruch zu setzen?
Das Programm erwartet nämlich immer 5 Zeilen pro Eintrag und jede Zeile muss mit CRLF abgeschlossen sein!
Also auch die letzte Zeile mit CRLF abschliessen.
Dieser Anfänger muss allerdings für jede Änderung an den "TargetFiles" den Quellcode ändern. Weniger schön...
Das stimmt zwar, aber ich denke, um erstmal zu verstehen, wie man das Ganze per Array und For-Schleife bearbeiten kann, ist das direkt im Quelltext leichter ersichtlich.
Wenn man das einmal verstanden hat, kann man dazu übergehen, das Ganze leichter konfigurierbar zu machen (sprich: Auslagerung in eine Ini-/Textdatei).
Hier mal ein Anfang als Script:
Global $aSourceFiles[2] = ["C:\Users\Silvi\Desktop\A\test.txt", "C:\Users\Silvi\Desktop\A\zwei.txt"]
Global $aTargetFiles[2] = ["C:\Users\Silvi\Desktop\A\test2.txt", "C:\Users\Silvi\Desktop\A\zwei2.txt"]
For $i = 0 To UBound($aSourceFiles) - 1
; ... Bearbeitung
_FileWriteFromArray($aTargetFiles[$i], $array, 1)
Next
Arrays hast Du doch schon verstanden!
Wenn Du jetzt noch ein Array für die Dateien einsetzt und das Ganze in einer For-Schleife abarbeitest, dann brauchst Du das nicht 10mal zu schreiben.
Eine For-Schleife bearbeitet dann alle Dateien. Dann kannst Du auch 1000 oder 10000 Dateien damit bearbeiten.
Versuch' Dich mal daran. Das ist ein gutes Anfänger-Projekt.