getDataArray auslesen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

getDataArray auslesen

Beitrag von clag »

Hallo Kenner und Könner ,

mit "getDataArray" habe ich einen Tabellenbereich von 3Spalten und 20Zeilen "eingelesen"
aber ich schaffe es nicht die einzelnen Werte zu lesen.
Mit

Code: Alles auswählen

myArray(15,2)
wie bei einem multidimensionalen Array tut es nicht

Code: Alles auswählen

myArray(15(2))
myArray(15,(2))
und solche und ähnliche versuche produzieren Fehler

dies hier gibt brave die gesamte Zeile aus

Code: Alles auswählen

print join(myArray(15), " ")
wie bekomme ich Zugriff auf ein einzelnes Element ?

Schonmal danke fürs Lesen.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: getDataArray auslesen

Beitrag von Stephan »

mit "getDataArray" habe ich einen Tabellenbereich von 3Spalten und 20Zeilen "eingelesen"
das gibt ein Array der Form myArray(19) und in jeder Zelle des Arrays (myArray(0) bis myArray(19) ein Unterarray myArray2(2).

Lesen ist deshalb wie folgt möglich:

Code: Alles auswählen

For i = 0 To UBOUND(myArray())
	myArray2 = myArray(i)
	For j = 0 To UBOUND(myArray2())
		txt = txt & "|" & myArray2(j) 'in eine Zeile
	Next j
	txt = txt & CHR(13) 'neue Zeile	
Next i
Msgbox txt
Gruß
Stephan
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: getDataArray auslesen

Beitrag von Karolus »

Hallo

in python wäre das schlicht:

Code: Alles auswählen

doc = desktop.CurrentComponent
sel = doc.CurrentSelection
data = sel.FormulaArray
print('\n'.join('|'.join(row) for row in data)) 
ipython_noterbook.png
ipython_noterbook.png (13.75 KiB) 4567 mal betrachtet



Karolus
Zuletzt geändert von Karolus am Mi, 17.12.2014 21:29, insgesamt 2-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: getDataArray auslesen

Beitrag von clag »

Hallo Stephan,

danke für die schnelle Antwort,

habe jetzt dies daraus gemacht

Code: Alles auswählen

aData2() = aData(15)
print  aData2(2)
um im Array "eingelesener Bereich A1:C20" die Zelle "C16" anzusprechen

kann man das auch noch in einer Zeile zusammenfassen?

Edit:
aha der Karolus (Pytolus) ;) war auch da
aber mit Python sieht das bei mir noch viel schlimmer aus, wie mit Basic.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: getDataArray auslesen

Beitrag von Stephan »

naja, die spitzfindige Antwort ist das eine Zeile so ginge:

Code: Alles auswählen

aData2() = aData(15) : print  aData2(2)
aber das meinst Du natürlich nicht.

Deshalb: ich weiß es nicht.
Es gibt aber nach meiner Erinnerung zumindest ein Codebeispiel hier im Forum wie man es für GetData-Arrays schreiben kann wenn des ausgelesene Bereich nur einspaltig ist, aber das hilft Dir im KOnkreten ja nichts.

Persönlich muss ich ohnehin sagen das ich es immer so schreibe wie ich es hier gepostet hatte weil das für mich gedanklich am Einfachsten zu verstehen ist, und Letzteres ist doch wichtiger als 'kurzer' Code [1], weil es in Praxis doch immer nur darauf ankommt Fehler im Code schnell zu finden oder Code anzupassen und erweitern.

[1]
Ich schreibe das so weil ich zu Zeiten Basic programmieren gelernt habe wo auf den damaligen 8-Bit 'Kisten' [2] tatsächlich eine Rolle spielen konnte wieviele Zeilen und/oder Code ein Makro hatte weil jede zusätzliche Zeile (Auch wenns nur ein Kommentar war) das Makro u.U. merklich bremste (merklich meint hier Werte irgendwo im Milisekundenbereich), was dadurch kommt das bei damals sehr üblichen GOTOs und GOSUBs der Basic-Interpreter immer jede Zeile 'durchlas' bis er zu der gewünschten Stelle kam.
Heute ist schon rein die Hardware so schnell das _diese_ Dinge nicht mehr 'auffallen', ob sie überhaupt noch existent sind müsste man mal testen.


[2]
das hier war der erste Computer mit welchem ich Basic programmieren gelernt habe:
http://de.wikipedia.org/wiki/Z_9001,_KC_85/1,_KC_87

Lustigerweise hieß das Betriebssystem "CAOS" (Cassette Aided Operating System):
http://www.kcclub.de/index.php?option=c ... &Itemid=88


Gruß
Stephan
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: getDataArray auslesen

Beitrag von Karolus »

Hallo

@clag:
wieso greifst du zuerst auf ..DataArray zu, wenn du dann doch wahlfrei einzelne Zellen darin ansprichst?

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: getDataArray auslesen

Beitrag von clag »

Hallo Strephan,

danke für deine ausführliche Antwort, daraus schließe ich eine direkte Adressierung wie bei dem multidimensionalen Array ist nicht möglich.
Wenn man also direkten Zugriff auf den Array Inhalt möchte, weil man einzelne Daten manipulieren will, ist es angebracht die Daten gleich per Schleife in ein multidimensionales Array einzulesen, dann muss die Schleife nur einmal beim lesen durchlaufen!?

Und Ja manchmal ist "mehr" eben doch besser und viel mehr noch besser, vor allem beim Takt von Bus und Prozessoren ;)

Kann mich auch entsinnen, irgendwann hatte ich mal einen neuen Rechner und glaubte meine Batches wären nicht mehr funktionsfähig,
aber nein sie waren nun nur so schnell, das man keine Ausführungszeit mehr bemerkte. :D
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: getDataArray auslesen

Beitrag von clag »

Hallo Karolus,

sehe gerade deine Frage,
Karolus hat geschrieben:wieso greifst du zuerst auf ..DataArray zu, wenn du dann doch wahlfrei einzelne Zellen darin ansprichst?
weil ich vorher nicht auf dem Schirm hatte das es da so gravierende Unterschiede gibt.

Aber jetzt erscheint es mir klarer,
get DataArray nur wenn man das "Ganze" bearbeiten will
multidimensionales Arrays für wahlfreien Zugriff!?

Danke für eure Hilfe
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: getDataArray auslesen

Beitrag von Stephan »

danke für deine ausführliche Antwort, daraus schließe ich eine direkte Adressierung wie bei dem multidimensionalen Array ist nicht möglich.
ich bin jetzt mal pingelig: im Zweifel meint meine Antwort nur das ich es tatsächlich nicht weiß, meine Antwort meint hingegen nicht das ich mir sicher wäre das es keinen Weg dafür gibt.
Wenn man also direkten Zugriff auf den Array Inhalt möchte, weil man einzelne Daten manipulieren will, ist es angebracht die Daten gleich per Schleife in ein multidimensionales Array einzulesen, dann muss die Schleife nur einmal beim lesen durchlaufen!?


Ehrlich gesagt ich verstehe nicht Dein Anliegen, wenn Du nur den Wert in C16 ändern willst, dann sprich doch nur diese Zelle direkt an:

Code: Alles auswählen

ThisCompoment.Sheets(0).getCellRangeByName("C16").Value = <Dein neuer Wert>
Wenn Du hingegen den Wert explicit nur im Array ändern wolltest, wozu macht das Sinn bei einem Array bei dem Du vor Kurzem noch garnicht wusstest wie Du damit umgehen solltest, was irgendwie ausschliesst Du wolltest das geänderte Array weiterverarbeiten.
Wenn Du das geänderte Array hingegen an eine andere Stelle zurückschreiben wolltest ginge das doch auch indem Du das unverändete Array schreibst und anschliessen die Einzelzelle änderst (die an der neuen Position ggf. durch eine andere Adresse repräsentiert ist).

Es ist natürlich nicht falsch das Du es so machen willst wie Du es machen willst, einzig könnte es sein mir fiele doch noch etwas Anderes ein, wenn ich denn Dein eigentliches Ziel kennen würde.


Gruß
Stephan
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: getDataArray auslesen

Beitrag von clag »

hallo Stephan,

das getDataArray habe ich unbedarft gewählt weil es einfach erschien den Zellbereich zu lesen.

der Zellbereich enthält Daten in der 1.Spalte die durch SVERWEIS() Formeln generiert werden und in der 2.Spalte teile weise manuell eingegebene Daten. die in der Quelltabelle, die per SVERWEIS() ausgegebenen ersetzen sollen.

Nun wollte ich beide Spalten einlesen und vergleichen wenn in der 2.Spalte ein "Ersatzwert" steht sollte dieser in die 1.Spalte des Arrays übernommen werden.
Danach den geänderten Datensatz aus der 1.Spalte in die Quelltabelle schreiben.

Na das geht bestimmt auch besser oder einfacher aber ich bin ja auch noch weit entfernt von "Könner"
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: getDataArray auslesen

Beitrag von Karolus »

clag hat geschrieben:multidimensionales Arrays für wahlfreien Zugriff!?
Nein, direkt über .getCellByPosition(....) oder ..getCellRangeByName(..)

Aber ich lese aus deinem letzten Beitrag, das du eigentlich doch keinen wahlfreien Zugriff möchtest
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: getDataArray auslesen

Beitrag von clag »

hallo Karolus,

haha ja jetzt wo ihr mir steckt, das es nicht so einfach geht wie von mir gedacht,
werde ich jetzt wohl gleich beim einlesen die Prüfung vornehmen und die Werte in ein einfaches Array schreiben.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten