Autor Beitrag
cano199
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 16.07.15 21:13 
Hi,
ich habe ein Problem mit einem Object Array. Ich möchte diesen auf ein bestimmten Inhalt durchsuchen und die Position an dem dieses Übereinstimmt ausgeben lassen. Ich habe einen zwei dimensionalen Object Array[,] und in der Schleife muss ich diesem mit einem String vergleichen. Hierbei bekomme ich bei der Ausführung des Programmes immer eine Fehlermeldung, dass der Typ nicht übereinstimmt. Dementsprechend muss ich aus dem Object Array [,] einen zwei dimensionalen String Array[,] machen. Dieses habe ich mit der convert.to Methode nicht hin bekommen, da diese nur einen eindimensionalen Array umwandeln kann.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
object[,] myExcelFileValues = (object[,])range.Value2;
string[,] result;

for (int i = 0; i < colCount; i++)
{
  for (int j = 0; j < rowCount; j++)
  {
    result[i, j] = Convert.ToString(myExcelFileValues[i, j]);

    if (result[i, j] == eingabe)
    {
      derindex = i;
      break;
    }
  } 
}

Habt ihr eine Idee wie ich das umwandeln kann???

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4433
Erhaltene Danke: 908


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 16.07.15 21:32 
Zitat:
Dieses habe ich mit der convert.to Methode nicht hin bekommen, da diese nur einen eindimensionalen Array umwandeln kann.


Convert.ToString und Arrays haben rein gar nix miteinander zu tun. Du rufst es ja auch einfach nur für jede Zelle des Arrays auf. Das es aus einem Array kommt und wieder in einen Array geschrieben wird und wieviele Dimensionen dieses Array hat ist der Methode der Convert Klasse schnurz egal.

Insofern frage ich mich was du uns damit sagen willst das da was nicht geht. Was geht da nicht? Landet etwas nicht erwartetes im result Array? Oder gar nix? Oder knallt der Code oder kompiliert der Code nicht? Oder, oder, oder ... Du mußt schon genauer sein.

Prinzipiell wenn die konkreten Typen die in den Zellen des myExcelFileValues Array stecken sauber ihre ToString überschrieben haben (Convert.ToString macht nix anderes als die ToString Methode des übergebenen Typen aufzurufen) sollte da was konvertiert werden.

Irgendwie solltest du aber die result Variable initialisiert haben so wie gezeigt sollte das nicht kompilieren da result noch dimensionslos ist.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4056
Erhaltene Danke: 842

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Do 16.07.15 22:01 
Hallo und :welcome:

du brauchst gar nicht das result-Array, sondern kannst direkt das object-Array abfragen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
object[,] myExcelFileValues = (object[,])range.Value2;

for (int i = 0; i < colCount; i++)
{
  for (int j = 0; j < rowCount; j++)
  {
    if (myExcelFileValues[i, j].ToString() == eingabe)
    {
      derindex = i;
      break;
    }
  }
}

(bedenke, daß die break-Anweisung so nur die innerste Schleife beendet, d.h. die äußere Schleife dann weiterläuft und evtl. nochmals den eingabe-Wert findet - letztendlich du also den Index des letzten Werts erhältst, falls es mehrere gleiche Werte im Array gibt)

PS: Bitte setze demnächst deinen Code selber in passende C#-Tags, danke.
cano199 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 17.07.15 18:08 
Hi,
ich habe das mal ausprobiert wie du es gesagt hast, aber leider habe ich immer noch eine Fehlermeldung (screenshot befindet sich im Anhang).[img]
Einloggen, um Attachments anzusehen!
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Fr 17.07.15 18:50 
diese Fehlermeldung hat nix mit deinem vorherigen Poblem zu tun. Das liegt daran, dass dein Array result noch nicht initzialisiert ist.
Du musst deinem Array eine feste größe zuweisen damit du es verwenden kannst.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
object[,] myExcelFileValues = (object[,])range.Value2;
string[,] result = new string[colCount, rowCount];

for (int i = 0; i < colCount; i++)
{
  for (int j = 0; j < rowCount; j++)
  {
    result[i, j] = Convert.ToString(myExcelFileValues[i, j]);

    if (result[i, j] == eingabe)
    {
      derindex = i;
      break;
    }
  } 
}


// EDIT streich das ich schreib Müll hier

Ist der Code den du verwendest noch der gleiche wie hier oder hast du inzwischen was geändert?

// EDIT 2

Also der Fehler per se bedeutet einfach, dass entweder deine i oder j Variable größer sind, als die entsprechende Dimension deines Arrays. Stimmen den deine colCount und rowCount Variablen?
Du kannst das überprüfen wenn du beim nächsten Fehler einfach mal
ausblenden C#-Quelltext
1:
myExcelFileValues.GetLength(0)					

und
ausblenden C#-Quelltext
1:
myExcelFileValues.GetLength(1)					

im Direktfenster des Debuggers schreibst und ENTER drückst.
Das Ergebnis des ersten Befehls sollte dann deinem colCount und das Zweite deinem rowCount entsprechen.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4056
Erhaltene Danke: 842

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Fr 17.07.15 18:59 
Hast du vllt. rowCount und colCount vertauscht?
Oder du verwendest gleich myExcelFileValues.GetLength(0) und myExcelFileValues.GetLength(1).

Edit: Sorry, hatte nicht gesehen, daß user profile iconC# seinen Beitrag gerade editiert hatte - aber doppelt hält besser. ;-)
cano199 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 17.07.15 21:58 
Hi,
euer Hinweis auf die Länge des Arrays war ausschlaggebend! Der Array beginnt bei [1,1] und wenn ich dann i & j auf 0 setzte.... kommt der Fehler!

DANKE!!!
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Sa 18.07.15 12:14 
Hmm das finde ich jetzt seltsam. Arrays beginnen eigentlich immer bei 0. Es kann sein das bei der Office API alles bei 1 beginnt aber dann müsstest du maximal eine NullReferenceException bekommen und keine IndexOutOfBoundException. Würde mich interessieren was da los ist.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler