Hör mir auf mit ForEachJosh hat geschrieben:Für diesen Fall haben wir doch ForEach()
@NicTheQuickCode: Alles auswählen
NewList x.s() Define *previous.String For tmp_p = 65 To 90 AddElement(x()) : x() = Chr(tmp_p) AddElement(x()) : x() = Chr(tmp_p) AddElement(x()) : x() = Chr(tmp_p) AddElement(x()) : x() = Chr(tmp_p) Next *previous = LastElement (x()) ForEach x() If x() <> *previous\s Or ListSize (x()) = 1 Debug "New element: " + x() Else Debug "Ignoring: " + x() EndIf *previous = @x() Next
Den ersten Eintrag außerhalb der Schleife abarbeiten zu lassen ist nicht unbedingt die feine Art und kann durch die notwendige Codeverdoppelung leicht zu Fehlern führen.
Ich hab mich mal mit While gestern den ganzen Tag beschäftigt, und meine vorhanden ForEach Lösungen durch While
(wo es möglich war) ersetzt.
Der Code ist viel kompakter und vertändlicher geworden * In Zukunft probier ich alles erst mit While
*aber fern von Optimal..........der Code ist die Hölle ^^
Ich habe eine Gadget Liste.
Die wiederum hat Directory Entrys in den jpg's sind, aber auch Entrys die direkte jpg Files sind.
Ich lasse die Directorys in dem Format in eine Preference Datei werfen.
Beispiel
Code: Alles auswählen
[<DIR ENTRY>C:\!JustPics\*ID000000]
<LST FILE> = sVFK8Mev.LST
<NO PREV> =
<IGN FILTER> =
;
<DIR Recursive> = 0
<FILE-ID0>C:\!JustPics\!JustPics.rar = 166**a4b5cf2a58c15b21d0ce83d07dafb1942028c223
<FILE-ID1>C:\!JustPics\Bridge01.jpg = 132411**db050902c54ebd1510dcfa0088e113836e266449
<FILE-ID2>C:\!JustPics\Bridge02.jpg = 84338**d8f51b908fa11b6c2a5b3e72c58fcfb2db2a2f84
<FILE-ID3>C:\!JustPics\Bridge03.jpg = 77206**5822b95ee3d317610f841ed6f8d4d0b1f0c39d6b
[<FILE ENTRY*ID000001]
<LST FILE> = Zy4EZ0UV.LST
<NO PREV> =
<FILE-ID0>C:\!JustPics22\Break Machine - Street Dance.flv = 17003819**dffbccd04e81620a931bb92839c66a1ec449502f;306746aaf04e7d5f08548d7ec575964a2466f1ac...........
;
<PREV V OUT> = C:\NewFolder 0001\
<DateC> =
<DateM> =
<STATUS> = $Done
<COMMENT> =
<TAGS> =
;
;
[<FILE ENTRY*ID000002]
<LST FILE> = 0lLTkvDX.LST
<NO PREV> =
<FILE-ID0>C:\!JustPics22\Bridge01.jpg = 132411**db050902c54ebd1510dcfa0088e113836e266449
;
<PREV P OUT> = C:\NewFolder 0001\
<DateC> =
<DateM> =
<STATUS> = $Done
<COMMENT> =
<TAGS> =
;
;
[<FILE ENTRY*ID000003]
<LST FILE> = 1PjiaQAr.LST
<NO PREV> =
<FILE-ID0>C:\!JustPics22\Bridge02.jpg = 84338**d8f51b908fa11b6c2a5b3e72c58fcfb2db2a2f84
;
<PREV P OUT> = C:\NewFolder 0001\
<DateC> =
<DateM> =
<STATUS> = $Done
<COMMENT> =
<TAGS> =
;
;
Und ich lasse alles in eine structurierte Linked List (W2_PicList()) werfen, da ich zu dem Zeitpunkt zu der sie gefüllt wird, aus einer Prefence Datei lese lassen muss, und kein Bock hab da in der while schleife noch rumzufummeln, weil die sowieso schon so viel erledigen muss. Prüfen ob eine Extension für die ein Thumbail erstellt werden soll, die ursprüngliche Gadget Entry Position ermitteln usw
Und dann geht der Mist los !
Das Tool kann von kompletten Ordnern ein Preview Thumbail erstellen, und von einzelnen Entrys.
Code: Alles auswählen
GadgetEntryPos | file/folder
000000 | c:\justpics\ <--- 10 Files
000001 | c:\morepics\ <- 10 Files
000002 | c:\hans1.jpg
000003 | c:\hans2.jpg
000004 | c:\hans3.jpg
000005 | c:\blabla\klaus1.jpg
000006 | c:\blabla\klaus2.jpg
000007 | c:\blabla\klaus3.jpg
Also muss ich ne Schleife abarbeiten lassen, die markieren tut (W2_PicList()\Status ist dann 1) wann der nächste Ordner anfängt (auch ob es ursprünglich ein Folder oder File Entry war, weil ich das viel später brauche) und das die EntryID Präfix für die große JPG Ausgabe Datei anlegt. Und den AusgabeDateinamen für jedes Element richtig setzt.
z.B
Element 0 -> 000000-OrdnernameKonvertiert-OriginalDateiname.jpg
Element 1 -> 000000-OrdnernameKonvertiert-OriginalDateiname.jpg
...
Element 10 -> 000001-OrdnernameKonvertiert-OriginalDateiname.jpg
Element 11 -> 000001-OrdnernameKonvertiert-OriginalDateiname.jpg
Dann wird eine While Schleife abgearbeitet, die die Temporäre Liste füllt, aus der die Thumbnails erstellt werden.
Und diese While schleife, füllt bis die nächste "Other Folder" Markerung gefunden wird, und führt dann aus.
Soweit sogut...........und jetzt kommt der nervige Teil, der mich fast um den Verstand gebracht hat (Wutanfälle, Build Num 39383948349)
Die einzelnen Bilder !
Code: Alles auswählen
gadgetentry pos | file/folder
000000 | c:\justpics\ <--- 10 Files
000001 | c:\morepics\ <- 10 Files
000002 | c:\hans1.jpg
000003 | c:\hans2.jpg
000004 | c:\hans3.jpg
000005 | c:\blabla\klaus1.jpg
000006 | c:\blabla\klaus2.jpg
000007 | c:\blabla\klaus3.jpg
Klaus1 bis Klaus 3 zu 00005-000007 - blabla_klaus1.jpg
Alle Files sind in einer Liste ! Also muss ich den Versatz um 20 Positionen den die Files aus den Foldern verursacht haben aus noch berücksichtigen (start position für die folgenden while schleifen) wenn all der folgende Stress kommt.
Startposition der W2_PicList() Liste setzen.
Per While die Liste durchgehen und denn Versatz zwischen
Hans1.jpg und Hans3.jpg berechnen lassen (nehme als Vergleich die Directory Names, weil für die Single Pics noch keine Folder Change Variable gesetzt ist, und einem Counter W2_PicList()\DiffCountFirstToLast der den Versatz vom ersten File -> Hans1 bis zum letzten Hans3 mitzählt) damit ich das mit den Dateinamen
Hans 1 bis Hans 3 zu 00002-000004 - hans1.jpg
Klaus1 bis Klaus 3 zu 00005-000007 - blabla_klaus1.jpg
hinkriegen kann.
Danach darf ich schon wieder ne Schleife aufrufen, diesmal eine ForEach, die W2_PicList()\FirstSinglePicEntry
setzt, immer wenn das Directory sich sich ändert (Warum ich nicht gleich W2_PicList()\Status von weiter oben nehme ? Weil das eine Markierung nur für Entrys die Directorys waren ist, muss so sein, weil es noch eine Template List gibt die für viel später gefüllt wird, und differenzieren muss, zwischen ursprünglich jps aus Folder Entry oder Single jpg Files)
Und dann kommt nächste Tortur !
Die While Schleife die die Ausgabe Dateinamen generiert aus
W2_PicList()\FirstSinglePicEntry als Start und W2_PicList()\FirstSinglePicEntry + W2_PicList()\DiffCountFirstToLast als
Stop.
Danach kommt wieder ForEach
Die füllt die W2_TMP_PicList() Liste, bis sich der Folder ändert, wenn geändert, muss das Prev File erstellt werden.
Und danach kommt schon wieder eine ForEach Schleife mit der die Template Liste durch Einträge von W2_PicList()
gefüllt wird.
Code: Alles auswählen
If W2_PicList()\EntryFromFolder = 1
PrevTPLp()\EntryWasFolder = 1
PrevTPLp()\Src = W2_PicList()\Pic+" | more in same Folder"
PrevTPLp()\FolderStart = W2_PicList()\Status
Else
PrevTPLp()\FolderStart = W2_PicList()\Status
PrevTPLp()\EntryWasFolder = 0 ; Reset from -1 to 0. Or other Procedure will interprete -1 as True ! like = 1
PrevTPLp()\Src = W2_PicList()\Pic
PrevTPLp()\DiffCountFirstToLast.i = w2_piclist()\DiffCountFirstToLast.i
EndIf
PrevTPLp()\PrevFile = GetFilePart(w2_PicList()\final_out)
PrevTPLp()\EntryPos = W2_PicList()\EntryPos
PrevTPLp()\PrevFolder = W2_PicList()\OUT
....
...
Eine For Schleife die rückwärts arbeiten muss, und mit PrevTPLp()\EntryWasFolder
und PrevTPLp()\FolderStart
die Namen der PrevFiles korrigiert.
Weil die in der Template Liste so drin sind
Code: Alles auswählen
SourceFile | Prev OutputFile
c:\hans1.jpg | 00002-00002.jpg
c:\hans2.jpg | 00002-00003.jpg
c:\hans3.jpg | 00002-00004.jpg
c:\blabla\klaus1.jpg | 00005-00005.jpg
c:\blabla\klaus2.jpg | 00005-00006.jpg
c:\blabla\klaus3.jpg | 00005-00007.jpg
c:\hans1.jpg | 00002-00004.jpg
c:\hans2.jpg | 00002-00004.jpg
c:\hans3.jpg | 00002-00004.jpg
c:\blabla\klaus1.jpg | 00005-00007.jpg
c:\blabla\klaus2.jpg | 00005-00007.jpg
c:\blabla\klaus3.jpg | 00005-00007.jpg
Da nur immer das erste dargestellt wird, und dann bringt mir 000002-000002 und 000005-000005 nichts.
Jedenfalls funzt der Code, hab durchgeprüft wie blöd, aber es ist ein scheiß umständlicher, und vor allem hässlicher Code !
Das ist nur ein Bruchteil der Tortur.
https://postimg.org/image/ygvo45ecl/
*kotz*
Und wieviel Wut und Frust ich geschoben hab, sieht mann an Zeug wie
Code: Alles auswählen
failreturn(ProcName$,-3,"22 FUUUUUUUUUUUUUUUUCK")