Spalte an Array anfügen - was mache ich falsch

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Tastronomium
Posts: 5
Joined: 11 Jun 2020, 10:45

Spalte an Array anfügen - was mache ich falsch

Post by Tastronomium » 11 Jun 2020, 11:07

Hallo AHK- Freunde,

ich lese Dateienamen in ein Array1 ein, es sollen nun in einer weiteren Spalte andere Werte eingetragen werden. Dazu habe ich mir überlegt, die Werte aus Array1 in einer Schleife in Array2 zu schreiben, um dann später die anderen Werte (in meinem Code einfach der Index) dazu zu schreiben zu können. Leider funktioniert aber schon das Übertragen aus dem eindimensionalen in ein zweidimensionales Array nicht.

Wo habe ich meinen Denkknick, könnt Ihr mir bitte helfen?

Hier mein vereinfachter Code:

Code: Select all

Array1 := []
Array1 := ["Wert1" ,"Wert2" ,"Wert3"]

msgbox, % Array1[2]     ;das klappt

Array2 := []
For index, element in Array1
{
Msgbox Index: %index%  `nElement: %element%
Array2[%index%, 1] := %element%
Array2[%index%, 2] := %index%
}

msgbox, % Array2[1, 1]    ; das klappt nicht, die folgende Schleife dann natürlich auch nicht:

For row, subArray in Array2
{
	For column, value in subArray
	{
		Msgbox, Reihe: %row%`nSpalte: %column%`nWert: %value%
	}
}
Oder kann ich ein eindimensionales Array auch einfach in ein mehrdimensionales umwandeln?

Danke schon mal, mit freundlichen Grüßen

Tastronomium

aifritz
Posts: 256
Joined: 29 Jul 2018, 11:30
Location: Germany

Re: Spalte an Array anfügen - was mache ich falsch

Post by aifritz » 11 Jun 2020, 12:58

So funktioniert es.

Code: Select all

;Array1 := [] ;überflüssig, da in der Folgezeile die Definition erfolgt
Array1 := ["Wert1" ,"Wert2" ,"Wert3"]

msgbox, % Array1[2]     ;das klappt

Array2 := [] ;hier wird die Definition benötigt!
For index, element in Array1
{
Msgbox Index: %index%  `nElement: %element%
Array2[index, 1] := element
Array2[index, 2] := index
}

msgbox, % Array2[1, 1]    ; das klappt 

For row, subArray in Array2
{
	For column, value in subArray
	{
		Msgbox, Reihe: %row%`nSpalte: %column%`nWert: %value%
	}
}
Ob sich ein Array erweitern lässt, würde mich auch mal interessieren ;)

BoBo
Posts: 3834
Joined: 13 May 2014, 17:15

Re: Spalte an Array anfügen - was mache ich falsch

Post by BoBo » 11 Jun 2020, 14:27

Code: Select all

array := [1,2,3]								; anzahl items 3
Array.Push("a")									; item hinzufügen
MsgBox % array[4] "`n" array.Length()			; anzahl items 4
Array.Push("e")									; item hinzufügen
MsgBox % array.Length()							; anzahl items 5
MsgBox % array[1] "`n" array[array.Length()] 	; anzeige 1.+ letztes item

aifritz as guest

Re: Spalte an Array anfügen - was mache ich falsch

Post by aifritz as guest » 11 Jun 2020, 14:59

Hallo BoBo,
ja danke, Push hängt neue Elemente an.

Meine Frage bezog sich auf das Erweitern eines bestehenden Arrays um eine weitere Dimension :roll:

BoBo
Posts: 3834
Joined: 13 May 2014, 17:15

Re: Spalte an Array anfügen - was mache ich falsch

Post by BoBo » 11 Jun 2020, 16:00

Code: Select all

array := [1,2,3]		
array.InsertAt(1, """z"":" array[1], """y"":" array[2], """x"":" array[3])
MsgBox % array[1] "`n" array.z
array.z := 2
array.y := 0
array.x := "$"
MsgBox % array[1] "`n" array.z "`n" array.y "`n" array.x

Tastronomium
Posts: 5
Joined: 11 Jun 2020, 10:45

Re: Spalte an Array anfügen - was mache ich falsch

Post by Tastronomium » 12 Jun 2020, 05:30

Hallo BoBo und aifritz,
mit dem Code bleibt es doch aber trotzdem ein eindimensionales Array! Oder täusche ich mich? Ich vermag jedenfalls keine "zweidimensionalen Werte" zu entnehmen, Versuch Zeile 10. Es funktioniert aber, wenn ich von Anfang an ein zweidimensionales Array verwende, siehe Zeile 13:

Code: Select all

array := [1,2,3]		
MsgBox % array[1]
array.InsertAt(1, """z"":" array[1], """y"":" array[2], """x"":" array[3])
MsgBox % array[1] "`n" array.z
array.z := 2
array.y := 0
array.x := "$"
MsgBox % array[1] "`n" array.z "`n" array.y "`n" array.x
msgbox % array[1] "`n" array[2] "`n" array[3] "`n" array[4]
msgbox % array[1, 1] "`n" array[2, 1] "`n" array[1, 2] "`n" array[4]

Zweidim := [[11,12,13], [21,22,23], [31,32,33]]
Msgbox % Zweidim[3,2]
Was müßte ich ändern? Gruß Tastronomium

BoBo
Posts: 3834
Joined: 13 May 2014, 17:15

Re: Spalte an Array anfügen - was mache ich falsch

Post by BoBo » 12 Jun 2020, 10:08

Du dürftest Recht haben. Mit meinem "Beispiel" scheine ich zw 1-dimensionalem array und einfacher variablenzuweisung zu lavieren ... :crazy: :shh:

just me
Posts: 7389
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Spalte an Array anfügen - was mache ich falsch

Post by just me » 13 Jun 2020, 03:49

Tastronomium wrote:... Dazu habe ich mir überlegt, die Werte aus Array1 in einer Schleife in Array2 zu schreiben, um dann später die anderen Werte (in meinem Code einfach der Index) dazu zu schreiben zu können. ...

Moin,

wenn Du von vornherein weißt, dass Dein Array mehrdimensional werden soll, finde ich diese Überlegung falsch. Du solltest in diesem Fall gleich ein mehrdimensionales Array erstellen.

Code: Select all

#NoEnv
Werte := "Wert1|Wert2|Wert3"
Array := []
For Idx, Val in StrSplit(Werte, "|")
   Array[Idx] := [Val]
MsgBox, 0, Array[1`, 1], % Array[1, 1]
For Idx1, Val1 In Array
   For Idx2, Val2 In Val1
      MsgBox, 0, Array[%Idx1%`, %Idx2%], %Val2%
Das kannst Du dann jederzeit mit z.B.

Code: Select all

Array[1, 2] := 12
; oder
Array[1].Push(12)
erweitern.

Tastronomium
Posts: 5
Joined: 11 Jun 2020, 10:45

Re: Spalte an Array anfügen - was mache ich falsch

Post by Tastronomium » 13 Jun 2020, 03:59

Hallo Bobo und aifritz,

ich habe jetzt selbst eine Lösung gefunden, sowohl durch Zuweisung als auch mit InsertAs.
So kann man problemlos aus einem ein- ein zweidimensionales Array erzeugen.
Während die Zuweisung mit := überschreibt, werden durch InsertAt die nachfolgenden Werte nach hinten geschoben.
Schwierig finde ich, dass man dann für die Ausgabe der Werte erst irgendwie prüfen muß, ob da eine zweite Dimension da ist. Denn A[2, 1] funktioniert nur, wenn die Zeile 2 mehr als einen Wert hat, also aus einem SubArray besteht. - Ich hoffe, ich habe das jetzt richtig dargelegt, verbessert mich gern.
Um die Syntax für die Wert- Ausgabe einheitlich halten zu können, werde ich versuchen, überall leere Werte "" einzufügen, die dann überschrieben werden können.

Code: Select all

A := []
B := []
A := [1, 2, 3]
msgbox % A[1] "`n" A[2] "`n" A[3]
B := [5, 6, 7]
msgbox % B[1] "`n" B[2] "`n" B[3]
A.InsertAt(1, B)
msgbox % A[1, 1] "  " A[1, 2] "  " A[1, 3] "`n`n" A[2] "  " A[3] "  " A[4]
A[1] := [8, 9]
A[2] := B
msgbox % A[1, 1] "  " A[1, 2] "  " A[1, 3] "`n`n" A[2, 1] "  " A[2, 2] "  " A[2, 3] "`n`n" A[3]
C := ["x", "y"]
A.InsertAt(1, C)
msgbox % A[1, 1] "  " A[1, 2] "`n`n" A[2, 1] "  " A[2, 2] "  " A[2, 3] "`n`n" A[3, 1] "  " A[3, 2] "  " A[3, 3]"`n`n" A[4]
exit
Viele Grüße und Danke für Eure Hilfe

Tastronomium

Tastronomium
Posts: 5
Joined: 11 Jun 2020, 10:45

Re: Spalte an Array anfügen - was mache ich falsch

Post by Tastronomium » 13 Jun 2020, 04:03

Hallo just me,

jetzt haben sich unsere Posts überschnitten.
Du solltest in diesem Fall gleich ein mehrdimensionales Array erstellen
Das kann ich leider nicht, denn ich lese im TotalCommander die Dateien ein:

Code: Select all

SendMessage 1075, 2017, 0, , ahk_class TTOTAL_CMD ;Dateinamen in die Zwischenablage kopieren
QuelleDateien = %Clipboard%
Und das ist eben ein eindimensionales Array, oder sieht Du da eienen anderen Weg?
Gruß

just me
Posts: 7389
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Spalte an Array anfügen - was mache ich falsch

Post by just me » 13 Jun 2020, 05:11

Moin,

Code: Select all

QuelleDateien = %Clipboard%
Da sehe ich erst einmal kein Array. Ich nehme an, Du arbeitest die Liste mit Loop, Parse, ... oder Strplit() ab. Dann wären wir bei meinem Beispiel:

Code: Select all

Begrenzer := "|"
Dateien:= []
For Idx, DateiName in StrSplit(QuelleDateien, Begrenzer)
   Dateien[Idx] := [DateiName]
Das Array ist damit mehrdimensional und der Dateiame steht in Dateien[1, 1].
Du kannst auch 'sprechende' Schlüsselnamen verwenden.

Code: Select all

   Dateien[Idx] := {Name: DateiName}
Dann findet sich der Name in Dateien[1, "Name"] oder Dateien.1.Name.

Weitere Schlüssel-Wert-Paare kanst Du in beiden Fällen jederzeit hinzufügen.

Tastronomium
Posts: 5
Joined: 11 Jun 2020, 10:45

Re: Spalte an Array anfügen - was mache ich falsch

Post by Tastronomium » 13 Jun 2020, 05:19

Hallo just me,

super, vielen Dank! Ja, ich hatte mit Loop Parse gearbeitet.

So wie von Dir geschrieben hatte ich mir das gewünscht - aber leider nicht hinbekommen.

Nochmals herzlichen Dank für die Hilfe!

Alles Gute wünscht

Tastronomium

Post Reply

Return to “Ich brauche Hilfe”