- ベストアンサー
C#で配列の配列を使いたいがわからない
- C#でCSVファイルを読み込んで配列に格納する際、配列の配列を使用したいが方法がわからないです。現在はSplitを使用して配列に格納していますが、textArray[][]のようにしたいです。
- プログラムの概要は、CSVファイルからフラグが1のデータをリストに記録し、選択したデータをコマンドや引数を使って起動するものです。現在はCase文に直接コマンドを記載していますが、CSVファイルが変更されると対応できません。多次元配列やジャグ配列を使い、拡張性を持たせたいと考えています。
- 今回の課題は、C#で配列の配列を扱いたいということです。現在はCSVファイルを読み込んでSplitを使用して配列に格納していますが、textArray[][]のように2次元配列を使いたいです。また、プログラムの概要は、CSVファイルからフラグが1のデータをリストに記録し、選択したデータをコマンドや引数を使って起動するものです。現在の実装ではCase文に直接コマンドを記載しているため、CSVファイルが変更されると対応できません。多次元配列やジャグ配列を使用して柔軟性を持たせたいと考えています。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
ひょっとして、C#どころかプログラム自体経験ナシですか? ps.StartInfo.Arguments=""; for(int i = 2; i < strArrayList[index].Count(); i++) { ps.StartInfo.Arguments += strArrayList[i] + " "; } とでもやっておけば引数なしなら空, ありなら引数全てを組み立てたArgumentsが出来あがりますけど。
その他の回答 (7)
- D-Matsu
- ベストアンサー率45% (1080/2394)
なお、C#というか.NETの配列型はクラスで要素数を取るためのメソッドCountがあります。
お礼
ありがとうございます。 コマンドは実行できてますがやはり引数は配列指定だと呼び出せないですね。 配列の中身がない!みたいな感じのエラーが出ます。 たしかにエクスプローラに引数はないけど…(-_-;) 引数があるかないかで判定して、外だしのプログラムを呼び出すような 関数はありますか?
- D-Matsu
- ベストアンサー率45% (1080/2394)
SelectedIndexはint型で上から順の選択値。 リストの入力元はList<String[]>の各要素。 つまり、switch~caseなぞ使わなくても元のリストに対してSelectedIndexで特定出来ます。 質問の元データを見る限り、コマンドもデータに入っているようですからそれを使って実行すればOK。
- D-Matsu
- ベストアンサー率45% (1080/2394)
そっちについては、ListBoxの使い方を知らないとしか言えません。 Text使ってswitch~caseで判断なぞしなくてもSelectedIndexで選択要素番号を取得できて、かつListBoxとList<String[]>のインデックスは1:1な訳です。
お礼
listbox1.selectedindex を使って、どうやってマッチングさせるんですか? でも、それでもきっと引数のエラーはでますよね。
補足
case switch の条件のところを listbox.Selectedindex にして値を0,1,2,3 で設定したら出来ました! あとは繰り返し文で、引数を入力されているだけとるには どうしたらいいですか?…
- D-Matsu
- ベストアンサー率45% (1080/2394)
とりあえず大雑把に説明しときます。詳細は先に書いた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が飛んできます。
お礼
ありがとうございます。 一応配列はできました。 ただ配列を変えてもやっぱりswitch case で配列を抜き出すことはできませんね。引数を無限に引っ張れないですし。空だとエラー… 直書きするしかないみたいです。
- D-Matsu
- ベストアンサー率45% (1080/2394)
#1でList<String[]>って書いたのにList<String>使ってるのは何故ですか?
お礼
こちらの入力ミスです…使ってるPCがうち向けのみなので、この質問はスマホでやっているため、手入力ミスが多少あると思います。失礼しました。 PC上はしっかりカッコついてます。 今はsplit を使わなくなっているので、もう一度やってみます!
補足
今は String [ ] line = parser.readfields(); で読み込みしてるんですが、やっぱりlist < string [ ] > は使えません。 使う場所の間違いかも知れませんが。
- D-Matsu
- ベストアンサー率45% (1080/2394)
Listの使い方はとりあえずこれを読みましょう。 http://msdn.microsoft.com/ja-jp/library/6sh2ey19(v=vs.80).aspx
お礼
ありがとうございます。 list < string >を使うと、split の型 string [ ] 型に暗黙的に変換できません というエラーが出ます。 この場合だと、split 以外で配列にしないといけないんですか?… ちなみにtextfieldparser に関しては設定がいろいろあるみたいで、できません でした。 c # 初なのでそういったものはよくわかりません。
補足
Text fieldparser によるCSVファイル読み込みは出来ました! 参照設定の追加でできました! あとは多次元をどうやってやるかなんですが…(-_-;)
- D-Matsu
- ベストアンサー率45% (1080/2394)
とりあえずStreamReaderとString.Splitを使うのではなくTextFieldParserを使った方が「正しく」読むことができます。 http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.fileio.textfieldparser.aspx が、まぁそれはさておいて。 とりあえず簡単に実装するならList<String[]>ですかねぇ。
お礼
ありがとうございます。 list <string[]>?? これはどうやって使うんですか?…
お礼
ありがとうございます。 経験はVBAを少しとCをちょっとです。 本を読みながらやっています!!