Autor Beitrag
Help_Me
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Do 13.05.10 14:50 
Hallo!

Ich hab ein zweidimensionales Array.
Ich würde gerne aus diesem zweidimensionalen Array die erste Zeile in ein eindimensionales Array einlesen und das zweidimensionale Array um diese Zeile "kürzen".
Über eine for-Schleife habe ich die erste Zeile in mein eindimensionales Array eingelesen. Nur habe ich jetzt noch mein komplettes zweidimensionales Array. Das Problem ist, dass ich seeehr große Datenmengen hab, weswegen das Einlesen mittels einer for-Schleife in ein neues, kleineres Array womöglich zu lange dauern würde.
Was würdet ihr mir raten??

Grüße
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 13.05.10 15:59 
Wahrscheinlich ist es einfacher, das zweidimensionale Array als List<> von eindimensionalen Arrays darzustellen. Dann kannst du daraus einzelne Zeilen auslesen und mit RemoveAt entfernen, ohne überhaupt etwas kopieren zu müssen.

_________________
>λ=
Help_Me Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 14.05.10 09:16 
Meldung die ich bekomme: =/
Das Objekt des Typs "System.Object[,]" kann nicht in Typ "System.Collections.Generic.List`1[System.Array]" umgewandelt werden.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 14.05.10 12:45 
Habe auch nicht behauptet, dass sich das implizit umwandeln lässt. Das musst du entweder über zwei Schleifen selbst machen oder (woran ich eigentlich gedacht habe) auf das 2D-Array direkt verzichten.

_________________
>λ=
Help_Me Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 14.05.10 13:15 
Hmm...ich glaube nicht, dass ich darauf verzichten kann.
Was wäre deiner Meinung nach der beste Weg mit meinem zweidimensionalen Array?
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 14.05.10 13:59 
Ein Array ist sehr statisch. Man kann nicht einfach Elemente hinzufügen oder entfernen. Es ist mehr ein ständiges hin und her kopieren und das ist sehr intensiv. Es gibt wahrscheinlich keinen sinnvollen Grund für deine Arrays. Oder kannst du uns einen nennen?

Deshalb bleibt die einfachste Konsequenz auf das Array zu verzichten und stattdessen eine Liste zu nehmen.

Gruß
Help_Me Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 14.05.10 14:15 
user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Es gibt wahrscheinlich keinen sinnvollen Grund für deine Arrays. Oder kannst du uns einen nennen?

Einen Grund kann ich euch nennen, vermutlich nur keinen sinnvollen. :wink:
Ich hatte den Code schon in einem anderen Thread gepostet:
ausblenden C#-Quelltext
1:
Array array = (Array)myRange.Value;					

Mir ist nicht klar, wie ich die Werte meines Excel-Ranges in eine List bekomme.
Wenn das geht...super! Nur bräuchte ich dann eure Hilfe, weil bislang ist es mir nicht klar geworden wie ich das hinbekomme.
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Fr 14.05.10 14:42 
ausblenden C#-Quelltext
1:
Array array = (Array)myRange.Value;					


Öhm... wieso brauchst du dafür ein Array oder List?

Wie dem auch sei, es gibt in der Klasse List die Methoden AddRange und Add. Die sollten weiterhelfen.

_________________
Die Lösung ist nicht siebzehn.
Help_Me Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 14.05.10 14:55 
Ah okay, super! Damit werd ichs mal versuchen. Aber dazu:
user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:

Öhm... wieso brauchst du dafür ein Array oder List?

Wie arbeitet man sonst damit, bzw. wie würdest du das tun?
Ich greif später auf die einzelnen Werte innerhalb dieses Range zu, das erscheint mir mit dem Array deutlich einfacher, bzw. mit einer List.
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Fr 14.05.10 15:01 
user profile iconHelp_Me hat folgendes geschrieben Zum zitierten Posting springen:
Ah okay, super! Damit werd ichs mal versuchen. Aber dazu:
user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:

Öhm... wieso brauchst du dafür ein Array oder List?

Wie arbeitet man sonst damit, bzw. wie würdest du das tun?
Ich greif später auf die einzelnen Werte innerhalb dieses Range zu, das erscheint mir mit dem Array deutlich einfacher, bzw. mit einer List.



Wenn das mehrere Werte sind würde ich ebenfalls eine List nehmen, aber eigentlich erscheit mir Value ja als einzelnes Element, oder irre ich mich da?

oder meinst du Values oder Value[I]?

_________________
Die Lösung ist nicht siebzehn.
Help_Me Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 14.05.10 15:04 
Nein, schon Value.
Range beinhaltet mehrere (Excel-)Zellen. Mit Value greife ich dann auf die einzelnen Werte der Zellen zu und lege sie dann in einem Array oder einer List ab.
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Fr 14.05.10 15:09 
bin kein C#-Experte, aber müsstest du dann nicht mit einer Schleife und Value[I] arbeiten?

Denn mit

ausblenden C#-Quelltext
1:
Array array = (Array)myRange.Value;					


weist du deinem Array einen Wert zu, und dann würde dein Array die ganze Zeit von diesem Wert überschrieben...

_________________
Die Lösung ist nicht siebzehn.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 14.05.10 15:20 
Ah, immer noch Excel. Ja, dann ist es wahrscheinlich wirklich am günstigsten, das Array direkt in eine Liste einzulesen. Aber was haben bitte "seeehr große Datenmengen" in Excel zu suchen :eyecrazy: ?
user profile iconHelp_Me hat folgendes geschrieben Zum zitierten Posting springen:
Mir ist nicht klar, wie ich die Werte meines Excel-Ranges in eine List bekomme.
So viel gebe ich dir mal vor ;) .
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
var rows = new List<object[]>();

Schleife 1...
  var row = new object[...];
  Schleife 2...
    row aus Array füllen...
  rows.Add(row);

_________________
>λ=
Help_Me Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 14.05.10 15:27 
user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
bin kein C#-Experte, aber müsstest du dann nicht mit einer Schleife und Value[I] arbeiten?

Nein, seltsamerweise nicht. Das hab ich so in einem Forum gefunden und übernommen. Und siehe da, es klappt.

Danke Kha!

Nur hier ist nun mein Problem mit den großen Datenmengen.
Wenn ich über Array array = (Array)myRange.Value; meine Werte einlese, geht das flott.
Wenn ich das allerdings über zwei Schleifen mache, kostet das enorm Zeit. Und das war eigentlich auch der ausschlaggebende Grund, weswegen ich es eingelesen hab wie oben gepostet.

Sch***...was soll ich jetzt machen?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 14.05.10 15:40 
user profile iconHelp_Me hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich über Array array = (Array)myRange.Value; meine Werte einlese, geht das flott.
Wenn ich das allerdings über zwei Schleifen mache, kostet das enorm Zeit.
Wie kann das sein? Wenn du das Array aus Excel holst, muss die CLR es genauso neu erstellen und Feld für Feld befüllen, eigentlich sogar noch langsamer als es deine Schleifen schaffen sollten.

Erzähle doch mal ein wenig mehr über die eigentliche Aufgabe. Möglicherweise reicht es schon, die Zeilen gar nicht zu extrahieren, sondern sich lediglich den Index darauf zu merken?

_________________
>λ=
Help_Me Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 14.05.10 15:49 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Erzähle doch mal ein wenig mehr über die eigentliche Aufgabe. Möglicherweise reicht es schon, die Zeilen gar nicht zu extrahieren, sondern sich lediglich den Index darauf zu merken?


Dann mach ich das doch mal. Ist vermutlich am sinnvollsten.

Ich selektiere in Excel einen Bereich. In diesem Bereich kann es allerdings sein, dass die erste Zeile für die jew. Spalten die Überschrift beinhaltet. Derzeit darf ich noch von ausgehen, dass wenn die komplette erste Zeile aus Strings besteht, es sich um eine Überschriftenzeile handelt.
Handelt es sich bei der ersten Zeile um die Überschriften der jeweiligen Spalte, so darf ich diese Zeile im Grunde nicht gleich behandeln wie meinen restlichen Range, da dieser ja keine Überschriften beinhaltet, sondern Daten zum Weiterverarbeiten.
Im Grunde möchte ich also einen Range den ich bekomme aufteilen in Überschriften und restliche Daten.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 14.05.10 16:33 
Und wie sieht dieses Weiterverarbeiten aus? Warum dort nicht einfach die erste Zeile ignorieren?

_________________
>λ=
Help_Me Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 14.05.10 18:58 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Und wie sieht dieses Weiterverarbeiten aus? Warum dort nicht einfach die erste Zeile ignorieren?

Jap, so hatte ich es auch erst gemacht.

Soll ich aber anders lösen. Grund dafür ist, dass ich später eine Methode haben muss, die das Array komplett verwendet, sprich ohne Ignorieren der ersten Zeile die Daten des Arrays verwendet um sie später in eine DB zu schreiben.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 15.05.10 13:03 
Und du willst mir erzählen, dass das Auslesen aus Excel und Schreiben in eine DB kein Performance-Problem ist im Vergleich zum einfachen Kopieren eines Array-Teils in ein neues Array? Sorry, aber irgendwas stimmt hier hinten und vorne nicht ;) .

_________________
>λ=
Help_Me Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Sa 15.05.10 20:19 
Okay, hab mich nochmal informiert. Keine DB, aber ein RecordSet. Macht das einen Unterschied??

Mhh...ich hab mit der Programmierung halt nur sehr wenig Erfahrung. Hab halt gemerkt, als ich Werte in ein Array über zwei for-Schleifen einlesen wollte, dass das sehr viel Zeit in Anspruch genommen hat. =/

Was würdest du dann empfehlen? Kann ich mit meinem Array arbeiten?
Ich würds gern mal mit einer List versuchen und mit einem Array, zum Vergleich.
Bei der List hast du mir ja schone ne gute Hilfestellung gegeben, das versuch ich mal morgen so umzusetzen.
Aber wie würde ich jetzt mein Array "kürzen", kannst du mir das noch kurz erläutern?

Gruß