C言語からCSharpに言語を変えて、勉強を兼ねて別のプログラムを書いています。
学校でjavaは習っていましたが,それほど知識があるわけではありません。
本題ですが,「csvファイルを読み込んで数字として配列に入れる」方法が分かりません。
「csvファイルを読み込めば,プログラム内で配列を書かなくて済むからプログラムを短くできる」と思い、
インターネットで拾ったプログラムをコピー,実行してみたのですが,
(URL: ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1496945284)
例外処理を挟まないと途中で止まってしまいます。
また,例外処理を挟むと配列にデータが入りません。
2つプログラムと環境を書きますので,
①どう直したらいいのか
②もし動くのであれば,環境に足りない物
を教えていただけるとありがたいです。
PC:Windows7 Home Premium(インターネット接続なし)
開発ソフト:Microsoft Visual C# 2010 Express 10.040219 SP1Main.cs
using DxLibDLL;
namespace Test
{
public class Game{
static void Main(){
int i,j;
DX.ChangeWindowMode(DX.TRUE); DX.SetGraphMode(1120,630, 32);
DX.DxLib_Init();
if (DX.DxLib_Init() == -1) { return; }
load.test();
while (DX.ScreenFlip() == 0 && DX.ProcessMessage() == 0 && DX.ClearDrawScreen() == 0 )
{
for (i = 0; i < 4; i++){
for(j=0;j<4;j++){
DX.DrawString(50 + i * 50, 150 + j * 20, load.matA[i, j] + ",", DX.GetColor(255, 255, 0));
DX.DrawString(400 + i * 50, 150 + j * 20, load.matB[i, j] + ",", DX.GetColor(255, 255, 0));
DX.DrawString(700 + i * 50, 150 + j * 20, load.matAns[i, j] + ",", DX.GetColor(255, 255, 0));
}
}
DX.DrawString(50 ,500, load.b + "", DX.GetColor(255, 255, 0));
DX.DrawString(400 , 500, load.c + "", DX.GetColor(255, 255, 0));
}/*→*/ DX.DxLib_End();
return;
}
}
}
using System;
using System.IO;
using System.Text;
using DxLibDLL;
namespace Test
{
public class load{
public static int u, v;
public static double[,] matA = new double[4, 4];
public static double[,] matB = new double[4, 4];
public static double[,] matAns = new double[4, 4];
public static string b, c;
public static string[] a = new string[] { "読み込みに成功しました!", "読み込みに失敗しました…" };
public static void test()
{
// ,区切りのCSVを開きデータを読む
StreamReader sr = new StreamReader("test.csv", Encoding.GetEncoding("Shift_JIS"));
//4x4を読んでみる
for (u = 0; u < 4; u++)
{
string text = sr.ReadLine();
//Console.Write("Read:" + text + "\n");
string[] data = text.Split(',');
// DX.DrawString(50, 150+u*50 , data[0] + ",", DX.GetColor(0, 0, 0));
//数値に
for (v = 0; v < 4; v++){
try { matA[u, v] = Double.Parse(data[v]); b = a[0]; } //コピーしたコードではここと
catch{ b=a[1]; }
DX.DrawString(50+v*50, 150 + u * 20, matA[u,v] + ",", DX.GetColor(255, 255, 0));
}
}
//4x4を読んでみる
for (u = 0; u < 4; u++)
{
string text = sr.ReadLine();
//Console.Write("Read:" + text + "\n");
string[] data = text.Split(',');
//数値に
// DX.DrawString(50, 150+u*50 , data[0] + ",", DX.GetColor(0, 0, 0));
for (v = 0; v < 4; v++)
{
try { matB[u, v] = Double.Parse(data[v]); c = a[0]; } //ここで止まります。
catch { c = a[1]; }
DX.DrawString(50 + v * 50, 250 + u * 20, matB[u, v] + ",", DX.GetColor(255, 255, 0));
}
}
sr.Close();
//加算してみる
matAns = add(matA, matB);
//結果
}
// Matrixの加算の例
static double[,] add(double[,] matA, double[,] matB)
{
int len0 = matA.GetLength(0);
int len1 = matA.GetLength(1);
double[,] ans = new double[len0, len1];
for (int u = 0; u < len0; u++)
for (int v = 0; v < len1; v++)
ans[u, v] = matA[u, v] + matB[u, v];
return ans;
}
}
}
…長くなりましたが,どうかご教示よろしくお願いします。