Array auswerten

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Array auswerten

Beitrag von Wolfgang_B »

Hallo,
ich stelle mich wieder mal doof an ...
ich möchte ein Array nach Kontonummern auswerten. Es sollen die Summen der einzelnen Konten und die Kontobezeichnungen in ein neues Array ausgegeben werden.

Code: Alles auswählen

Bezeichnng	Konto	Betrag
Konto1		1000	10
Konto1		1000	2
Konto1		1000	399
Konto2		1010	34
Konto3		3000	2
Konto4		4000	6555
Konto5		8100	6
konto1		1000	34
Konto3		3000	77
Zuletzt geändert von Wolfgang_B am So, 20. Mär 2022 17:04, insgesamt 1-mal geändert.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Array auswerten

Beitrag von Martin Altmann »

Dein Konto 1000 hat drei verschiedene Bezeichnungen. Sollen das alle aufsummiert werden und alle Bezeichnungen hintereinanderweg stehen?
Oder mit jeweils die, die sich dieselbe Bezeichnung haben? Dann hättest du drei Summen für die Konten mit der Nummer 1000.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Array auswerten

Beitrag von Wolfgang_B »

war Schreibfehler ... Die Kontobezeichnung ist je nach Kontonummer immer gleich. HAbs in der Tabelle korrigiert.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Array auswerten

Beitrag von georg »

Hallo, Wolfgang -


wenn keine weiteren Vorgaben existieren, würde ich das Array nach Kontonummer sortieren, und das sortierte Array durchlaufen und bei jedem Wechsel der Kontonummer (Gruppenwechsel) {alte Kontonummer, Summe} an das neue Array anhängen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Array auswerten

Beitrag von Wolfgang_B »

Hallo Georg,
das probier ich schon die ganze Zeit. Funktioniert auch bis zurm letzten Step. Dann ist i um 1 größer als LEN(aKto) und da knallts ...

Code: Alles auswählen

	For i = 1 TO LEN(aKto )	
		
		nKto := aKto[i,1]	
		cKtoBez := aKto[i,3]
		
		DO WHILE nKto == aKto[i,1]
			nSum+=aKto[i,2]
			i++
		ENDDO
		
		AADD(aData, { nKto, nSum, cKtoBez, msgId })		
		nSum 		:= 0
		cKtoBez 	:= ""
	NEXt
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Array auswerten

Beitrag von azzo »

Hallo Wolfgang,
ich mache es immer so:

Code: Alles auswählen


function main()
	local aKtoSum := {}
	local ISeek := 0
	local I := 0
	local aKto := { ;
		{"Konto1   1000",	  10},;
		{"Konto1   1000",	   2},;
		{"Konto1   1000",	 399},;
		{"Konto2   1010",	  34},;
		{"Konto3   3000",	   2},;
		{"Konto4   4000",	6555},;
		{"Konto5   8100",	   6},;
		{"konto1   1000",	  34},;
		{"Konto3   3000",	  77 }}
	
	//xbrowse( aKto )
	
	
	FOR I := 1 to len(aKto)
	
	 ISeek := ASCAN( aKtoSum, {|aVal| aVal[1] == aKto[I,1] })
	      if ISeek  != 0
	         aKtoSum[ ISeek,2 ] +=  aKto[I,2]
	      else
	         aadd(aKtoSum,{  aKto[I,1], aKto[I,2] } )
	      endif
	
	NEXT
	//xbrowse( aKtoSum )

return nil



LG
Otto
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Array auswerten

Beitrag von Wolfgang_B »

Otto, vielen Dank! Funktioniert. Ich habe mir die letzten 3 Stunden hier einen abgebrochen ... :banghead:
Wahrscheinlichmüßte ich bei meiner Funktion mit 2 Variablen arbeiten. Deine Variante ist aber deutlich eleganter. :D
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Array auswerten

Beitrag von azzo »

Hallo Wolfgang,
fein. Seit einiger Zeit verwende ich vermehrt HASH Tables. Würde das bei dir auch funktionieren?

LG
Otto

Code: Alles auswählen


function main()
	local I := 0
	local aKto := { ;
		{"Konto1   1000",	  10},;
		{"Konto1   1000",	   2},;
		{"Konto1   1000",	 399},;
		{"Konto2   1010",	  34},;
		{"Konto3   3000",	   2},;
		{"Konto4   4000",	6555},;
		{"Konto5   8100",	   6},;
		{"Konto1   1000",	  34},;
		{"Konto3   3000",	  77 }}
	local hKto := {=>}
	? "mit HASH"
	FOR I := 1 to len(aKto)
		hKto[ aKto[I,1] ] := hb_HGetDef( hKto, aKto[I,1], 0 ) + aKto[I,2]
	NEXT
	//xbrowse( hKto, "HASH" )

return nil


Benutzeravatar
Frank Grossheinrich
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 142
Registriert: Fr, 31. Mär 2017 15:06
Wohnort: Eschborn
Hat sich bedankt: 5 Mal
Danksagung erhalten: 81 Mal
Kontaktdaten:

Re: Array auswerten

Beitrag von Frank Grossheinrich »

Hallo Zusammen,

darf ich auch noch einen Lösungsvorschlag beisteuern?

Code: Alles auswählen

#include "Common.ch"
#include "dac.ch"

PROCEDURE Main()
        LOCAL aKtoSum := {}
        LOCAL aKto := { ;
                {"Konto1   1000",          10},;
                {"Konto1   1000",           2},;
                {"Konto1   1000",         399},;
                {"Konto2   1010",          34},;
                {"Konto3   3000",           2},;
                {"Konto4   4000",        6555},;
                {"Konto5   8100",           6},;
                {"konto1   1000",          34},;
                {"Konto3   3000",          77 }}

   SELECT field1 AS konto, SUM( field2 ) AS Summe FROM ( aKto ) GROUP BY konto ORDER BY Summe DESC INTO ARRAY aKtoSum
   ? aKtoSum
   WAIT

RETURN
Und? :)

Grüße,
Frank
We love Xbase++, and you?
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Array auswerten

Beitrag von Wolfgang_B »

@Frank - genial!!! :D :D Auf SQL bin ich noch gar nicht gekommen. Das eröffnet mir ja gewaltige Perspektiven. Funktioniert einwandfrei. Habe das Statement noch etwas erweitert, damit ich die restlichen Information in das Zielarray bekomme. Werde jetzt noch andere Stellen in meinem Programm mit SQL modifizieren.

Vielen Dank für die Anregung!!

@Otto - mit Hashtables habe ich bis jetzt noch nicht gearbeitet. Werde ich auch mal ausprobieren. Vielen Dank!
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Frank Grossheinrich
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 142
Registriert: Fr, 31. Mär 2017 15:06
Wohnort: Eschborn
Hat sich bedankt: 5 Mal
Danksagung erhalten: 81 Mal
Kontaktdaten:

Re: Array auswerten

Beitrag von Frank Grossheinrich »

Hallo Wolfgang,

schön, wenn ich eine Anregung geben konnte.
Ja, wenn es um Arrays geht, kann man das mit (Xbase++) SQL sehr nett lösen.
Nie wieder dieses leidige hoch- und runterzählen von Variablen und Dergleichen. Dem Sortieren, dem Suchen, dem ...

Ich finde man kann den SQL Code auch ganz gut lesen.

Das geht übrigens auch bei DBF Tabellen :)

Schöne Grüße,
Frank
We love Xbase++, and you?
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Array auswerten

Beitrag von Wolfgang_B »

Hallo Frank, ich habe vor 20 Jahren mal mit SQL und Oracle-DB gearbeitet. Da muß ich nur mal meine SQL-Kenntnisse wieder rauskramen :D
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Antworten