Alma Konde Ответов: 1

Создайте массив string 2 dim для копирования данных из csv файла на языке C#


Hello, couldn't you please advise me how to create a string 2 dimensional array and copy there the data from the csv file. This code is not creating string data[,] array and do not copy the data from the csv file in the loop.


Что я уже пробовал:

using System;
using System.IO;
using System.Data;
using System.Collections.Generic;
using lpsolve55;

namespace LpSolveExample
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = 158;
            int m = 9;
            string[,] data = new string[n, m];
            string path = "D:\\NM1997.csv";
            StreamReader sr = new StreamReader(path);
            int i = 0, j = 0;
            string line; string temp;
            char delim = ';';
            string[] mass_t;
            while (((line) = sr.ReadLine()) != null)
            {
                mass_t = line.Split(';');
                while (j < mass_t.Length)
                {
                    temp = mass_t[j];
                    data[i, j] = (temp);//this does not work
                    j++;
                }
                i++;
            }
            for(int k=0;k>158; k++)
            {
                for(int l =0;l<9;l++)
                {
                    Console.Write(data[i, j]);
                    Console.WriteLine();

                }
            }
        }
    }
}

Richard MacCutchan

Вы никогда не сбрасываете j до нуля.

BillWoodruff

Поместите точки останова в свой код, одношагово пройдя через него с помощью F11 в Visual Studio. Наблюдайте за любыми ошибками или неожиданным поведением/значениями. Доложите, что вы здесь нашли.

1 Ответов

Рейтинг:
2

OriginalGriff

Вместо того чтобы использовать a while для вашего внутреннего цикла используйте for:

while (!sr.EndOfStream)
{
    line = sr.ReadLine();
    mass_t = line.Split(';');
    for (int i = 0; j < mass_t.Length; j++)
    {
        temp = mass_t[j];
        data[i, j] = temp;
    }
    i++;
}

Или лучше, используйте файл.ReadAllLines, чтобы прочитать их все в массив строк, и использовать foreach на этом массиве.

Даже лучше, чем это, хотя было бы использовать Быстрый читатель CSV[^] который также будет обрабатывать строки в кавычках. Он может быть настроен на использование ";" вместо "," в качестве разделителя.