• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#で配列の配列を使いたいがわかりません。)

C#で配列の配列を使いたいがわからない

このQ&Aのポイント
  • C#でCSVファイルを読み込んで配列に格納する際、配列の配列を使用したいが方法がわからないです。現在はSplitを使用して配列に格納していますが、textArray[][]のようにしたいです。
  • プログラムの概要は、CSVファイルからフラグが1のデータをリストに記録し、選択したデータをコマンドや引数を使って起動するものです。現在はCase文に直接コマンドを記載していますが、CSVファイルが変更されると対応できません。多次元配列やジャグ配列を使い、拡張性を持たせたいと考えています。
  • 今回の課題は、C#で配列の配列を扱いたいということです。現在はCSVファイルを読み込んでSplitを使用して配列に格納していますが、textArray[][]のように2次元配列を使いたいです。また、プログラムの概要は、CSVファイルからフラグが1のデータをリストに記録し、選択したデータをコマンドや引数を使って起動するものです。現在の実装ではCase文に直接コマンドを記載しているため、CSVファイルが変更されると対応できません。多次元配列やジャグ配列を使用して柔軟性を持たせたいと考えています。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.8

ひょっとして、C#どころかプログラム自体経験ナシですか? ps.StartInfo.Arguments=""; for(int i = 2; i < strArrayList[index].Count(); i++) {  ps.StartInfo.Arguments += strArrayList[i] + " "; } とでもやっておけば引数なしなら空, ありなら引数全てを組み立てたArgumentsが出来あがりますけど。

j-buffon
質問者

お礼

ありがとうございます。 経験はVBAを少しとCをちょっとです。 本を読みながらやっています!!

その他の回答 (7)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.7

なお、C#というか.NETの配列型はクラスで要素数を取るためのメソッドCountがあります。

j-buffon
質問者

お礼

ありがとうございます。 コマンドは実行できてますがやはり引数は配列指定だと呼び出せないですね。 配列の中身がない!みたいな感じのエラーが出ます。 たしかにエクスプローラに引数はないけど…(-_-;) 引数があるかないかで判定して、外だしのプログラムを呼び出すような 関数はありますか?

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.6

SelectedIndexはint型で上から順の選択値。 リストの入力元はList<String[]>の各要素。 つまり、switch~caseなぞ使わなくても元のリストに対してSelectedIndexで特定出来ます。 質問の元データを見る限り、コマンドもデータに入っているようですからそれを使って実行すればOK。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.5

そっちについては、ListBoxの使い方を知らないとしか言えません。 Text使ってswitch~caseで判断なぞしなくてもSelectedIndexで選択要素番号を取得できて、かつListBoxとList<String[]>のインデックスは1:1な訳です。

j-buffon
質問者

お礼

listbox1.selectedindex を使って、どうやってマッチングさせるんですか? でも、それでもきっと引数のエラーはでますよね。

j-buffon
質問者

補足

case switch の条件のところを listbox.Selectedindex にして値を0,1,2,3 で設定したら出来ました! あとは繰り返し文で、引数を入力されているだけとるには どうしたらいいですか?…

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

とりあえず大雑把に説明しときます。詳細は先に書いたMSDNをよーく読んでください。 Listに要素を追加する時にはAdd()を使います。 List<String[]> strArrayList = new List<String[]>(); ... strArrayList.Add(strArray); // strArrayはString.Split()やTextFieldParser.ReadField()の結果であるString[] 参照するときは配列のようにアクセスできます。 strArrayList[0][0] = "text"; ただし、Listは領域を自動的に確保する訳ではないのでString[]をAddしていない領域にアクセスしようとするとIndexOutOfRangeExceptionが飛んできます。

j-buffon
質問者

お礼

ありがとうございます。 一応配列はできました。 ただ配列を変えてもやっぱりswitch case で配列を抜き出すことはできませんね。引数を無限に引っ張れないですし。空だとエラー… 直書きするしかないみたいです。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

#1でList<String[]>って書いたのにList<String>使ってるのは何故ですか?

j-buffon
質問者

お礼

こちらの入力ミスです…使ってるPCがうち向けのみなので、この質問はスマホでやっているため、手入力ミスが多少あると思います。失礼しました。 PC上はしっかりカッコついてます。 今はsplit を使わなくなっているので、もう一度やってみます!

j-buffon
質問者

補足

今は String [ ] line = parser.readfields(); で読み込みしてるんですが、やっぱりlist < string [ ] > は使えません。 使う場所の間違いかも知れませんが。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

Listの使い方はとりあえずこれを読みましょう。 http://msdn.microsoft.com/ja-jp/library/6sh2ey19(v=vs.80).aspx

j-buffon
質問者

お礼

ありがとうございます。 list < string >を使うと、split の型 string [ ] 型に暗黙的に変換できません というエラーが出ます。 この場合だと、split 以外で配列にしないといけないんですか?… ちなみにtextfieldparser に関しては設定がいろいろあるみたいで、できません でした。 c # 初なのでそういったものはよくわかりません。

j-buffon
質問者

補足

Text fieldparser によるCSVファイル読み込みは出来ました! 参照設定の追加でできました! あとは多次元をどうやってやるかなんですが…(-_-;)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

とりあえずStreamReaderとString.Splitを使うのではなくTextFieldParserを使った方が「正しく」読むことができます。 http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.fileio.textfieldparser.aspx が、まぁそれはさておいて。 とりあえず簡単に実装するならList<String[]>ですかねぇ。

j-buffon
質問者

お礼

ありがとうございます。 list <string[]>?? これはどうやって使うんですか?…

関連するQ&A