C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[22]: 配列について [1]


(過去ログ 65 を表示中)

[トピック内 30 記事 (21 - 30 表示)]  << 0 | 1 >>

■37657 / inTopicNo.21)  Re[14]: 配列について
  
□投稿者/ Sak-Tak (12回)-(2009/06/26(Fri) 15:32:39)
2009/06/26(Fri) 15:33:51 編集(投稿者)

No37656 (みきぬ さん) に返信
> // [壁]*'-') ジー
>
> 「どこで」例外が起きているか、我々には結局わかってないのよねぇ。
> String.Split() では発生しないはずだ(よね?)から、その結果を使っている何かしらの処理で起こってるだろうとは思うんだけど。
>
>
> 簡単なプログラムをこしらせて、そこで再現させることはできるかしら? ファイルから読み込むかわりに、
>
> string[] stArray = new string[] { "a-b-c", "a-b-c-d", ... };
>
> のような配列から1要素ずつ取り出して処理を行うような感じで。
>
そうですね。

エラーになるPCにはVSは入っていないので、簡単にプログラム作ってもう一度検証してみます。
ありがとうございました。
引用返信 編集キー/
■37658 / inTopicNo.22)  Re[13]: 配列について
□投稿者/ επιστημη (1999回)-(2009/06/26(Fri) 15:33:05)
επιστημη さんの Web サイト
> 確認しましたが一緒でした。

さてさてどぉしましょう。

まずはその例外(IndexOutOfBoundExceptionかな?)を catch し、
FileDataの何番目を読んだときか/その内容/Splitの結果 をdumpして経過観察しますか。

引用返信 編集キー/
■37678 / inTopicNo.23)  Re[15]: 配列について
□投稿者/ Jitta on the way (339回)-(2009/06/26(Fri) 18:32:34)
ずーっと読んで

プログラムが問題なんじゃなく、デバッグの仕方が問題では?

debug モードでビルドしていたら、例外の詳細に例外が発生した場所が表示されると思います。ほんとうに、今書いている場所で発生しているか、確認しましょう。


ブロックの内外で、同じ名前の変数を宣言しているとか(警告上がる?)
引用返信 編集キー/
■37877 / inTopicNo.24)  Re[16]: 配列について
□投稿者/ すがり (49回)-(2009/07/02(Thu) 12:57:57)
ところで本件の原因は判明しましたでしょうか?

個人的に気になる現象でしたのでスレ主さんがどのように原因究明し、
解決に至ったのかもしよければお聞かせ願いたいです。
(別件でスレ主さんらしき方が現れたようなので、同名の別人でしたら
スルーなさってください)
引用返信 編集キー/
■37882 / inTopicNo.25)  Re[17]: 配列について
□投稿者/ Sak-Tak (16回)-(2009/07/02(Thu) 13:53:39)
はい。同じ人です。
報告が遅れてすいません。

ファイルから1行づつ読み込み、"-"区切りの文字列をsplitで分解し、配列に入れています。
その際、配列に入れたときの要素数が変わった時エラーになります。

111-222-333-444-555
111-222-333-444
111-222-333-444-555
(1行目→要素数5 2行目→要素数4 3行目→要素数5)
この場合3行目で分解したデータを配列に入れる際エラーになります。

全行要素数が同じになるようにファイルを書き換えるとエラーになりませんでした。
しかしながら、開発環境にあるXPでは正常に動作し、vistaではなぜダメなのかは分かりません。
別のVista搭載機でも同じでエラーになりました。
引用返信 編集キー/
■37885 / inTopicNo.26)  Re[18]: 配列について
□投稿者/ みきぬ (505回)-(2009/07/02(Thu) 14:22:47)
No37882 (Sak-Tak さん) に返信
> ファイルから1行づつ読み込み、"-"区切りの文字列をsplitで分解し、配列に入れています。
> その際、配列に入れたときの要素数が変わった時エラーになります。
>
> 111-222-333-444-555
> 111-222-333-444
> 111-222-333-444-555
> (1行目→要素数5 2行目→要素数4 3行目→要素数5)
> この場合3行目で分解したデータを配列に入れる際エラーになります。
>
それは興味深い。試したいけど、近くに Vista がないのであった。
再現コード(例えば↓のようなもの)はありますか?

string[] strArray = "111-222".Split('-');
Console.WriteLine(strArray.Length);
strArray = "111-222-333".Split('-');
Console.WriteLine(strArray.Length);

# ぐぐってみたけど関連事象もみあたらない
引用返信 編集キー/
■37887 / inTopicNo.27)  Re[19]: 配列について
□投稿者/ すがり (50回)-(2009/07/02(Thu) 14:42:56)
splitで落ちるとのことなので検証用に使えないかと以下のようなコードを作成してみました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1{
    class Program{
        static void Main(string[] args){

            string[] FileData = new string[]{
                "111-222-333-444-555",
                "111-222-333-444",
                "111-222-333-444-555"};
            string St;
            string[] array = null;

            Console.WriteLine("Case1");

            for (int i = 0; i < FileData.Length; i++){
                St = FileData[i];
                try {
                    array = St.Split('-');
                }catch (Exception e){
                    Console.WriteLine("Case1 index i:" + i + " / St :" + St);
                    Console.WriteLine(e.StackTrace);
                }
                foreach (string value in array){
                    Console.WriteLine(value);
                }
            }

            Console.WriteLine("Case2");

            for (int i = 0; i < FileData.Length; i++){
                St = FileData[i];
                try {
                    string[] array2 = St.Split('-');
                    foreach (string value in array2) {
                        Console.WriteLine(value);
                    }
                } catch (Exception e) {
                    Console.WriteLine("Pattern2 index i:" + i + " / St :" + St);
                    Console.WriteLine(e.StackTrace);
                }
            }
            Console.WriteLine("end");
        }
    }
}

私の手元にもVista環境がないので、もしお時間があるようでしたら実行結果が知りたいです。

引用返信 編集キー/
■37897 / inTopicNo.28)  Re[20]: 配列について
□投稿者/ Sak-Tak (18回)-(2009/07/02(Thu) 15:32:38)
2009/07/02(Thu) 15:33:57 編集(投稿者)

すがり さん
vistaにて試してみました。
全く問題なく配列に入っているようです。
正常に出力しています。(ReadLine()は追加させてもらいました。)
case1もcase2も正常です。
あれー。ということはファイルの読み込みに問題があるのだろうか。
改行はチェックしたのですが。
もう一度ファイル見直してみます。

引用返信 編集キー/
■37902 / inTopicNo.29)  Re[21]: 配列について
□投稿者/ ぱぱいやん (49回)-(2009/07/02(Thu) 15:47:51)
ぱぱいやん さんの Web サイト
No37897 (Sak-Tak さん) に返信
> 2009/07/02(Thu) 15:33:57 編集(投稿者)
>
> すがり さん
> vistaにて試してみました。
> 全く問題なく配列に入っているようです。
> 正常に出力しています。(ReadLine()は追加させてもらいました。)
> case1もcase2も正常です。
> あれー。ということはファイルの読み込みに問題があるのだろうか。
> 改行はチェックしたのですが。
> もう一度ファイル見直してみます。

処理の対象となるデータを表示させるなどして、視覚的に確認して見比べてみるのが良いですよね。
引用返信 編集キー/
■37904 / inTopicNo.30)  Re[22]: 配列について
□投稿者/ Sak-Tak (19回)-(2009/07/02(Thu) 16:30:45)
No37902 (ぱぱいやん さん) に返信
> 処理の対象となるデータを表示させるなどして、視覚的に確認して見比べてみるのが良いですよね。
そうですね。おっしゃる通りです。
一方で動いて、一方で動かない。その時点でプログラムかOSの仕様だと決め付けていたのがダメですね。
元ファイルを作り変えて、試したら、両方でうまくいきました。
ホント、みなさんお騒がせしました。
これからそのファイルの何が原因だったのかを検証します。

解決済み
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -