Читайте строки данных из CSV, затем отображайте данные - PullRequest
1 голос
/ 22 октября 2019

Мне нужно прочитать информацию из текстового файла, сохранить ее каким-либо образом (массив или список), а затем отобразить данные. Программа должна включать как минимум один дополнительный класс. Я ударил стену и не могу прогрессировать.

строка, строка, двойка, строка имя, значок, оклад, название должности, значок, оклад, название должности,значок, зарплата, должность

Извините, и я знаю, что приведенный ниже код является катастрофическим, но я в растерянности и у меня заканчивается время.

namespace Employees
{
    class Program
    {
        static void Main()
        {
            IndividualInfo collect = new IndividualInfo();

            greeting();
            collect.ReadInfo();
            next();
            for (int i = 0; i < 5; i++)
            {
                displayInfo(i);
            }
            exit();

            void greeting()
            {
                Console.WriteLine("\nWelcome to the Software Development Company\n");
            }
            void next()
            {
                Console.WriteLine("\n*Press enter key to display information . . . *");
                Console.Read();
            }
            void displayInfo(int i)
            {
                Console.WriteLine($"\nSoftware Developer {i + 1} Information:");
                Console.WriteLine($"\nName:\t\t\t{collect.nameList[i]}");
            }
            void exit()
            {
                Console.WriteLine("\n\n*Press enter key to exit . . . *");
                Console.Read();
                Console.Read();
            }
        }
    }
}

class IndividualInfo
    {
        public string Name { get; set; }
        //public string Badge{ get; set; }
        //public string Position{ get; set; }
        //public string Salary{ get; set; }

        public void ReadInfo()
        {
            int i = 0;
            string inputLine;
            string[] eachLine = new string[4];
            string[,] info = new string[5, 4]; // 5 developers, 4x info each
            StreamReader file = new StreamReader("data.txt");
            while ((inputLine = file.ReadLine()) != null)
            {
                eachLine = inputLine.Split(',');
                for (int x = 0; x < 5; x++)
                {
                    eachLine[x] = info[i, x];
                    x++;
                }
                i++;
            }
            string name = info[i, 0];
            string badge = info[i, 1];
            string position = info[i, 2];
            double salary = Double.Parse(info[i, 3]);
        }

        public List<string> nameList = new List<string>();
    }

ИтакЯ думаю, что могу собрать его с помощью двумерного массива, но список (ы) был бы лучше. Кроме того, код, который я разместил там, не будет работать, потому что я пока не могу понять, как его отобразить. Вот почему я здесь.

1 Ответ

1 голос
/ 22 октября 2019
using System.IO;

static void Main(string[] args)
{
    using(var reader = new StreamReader(@"C:\test.csv"))
    {
        List<string> listA = new List<string>();
        List<string> listB = new List<string>();
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(';');

            listA.Add(values[0]);
            listB.Add(values[1]);
        }
    }
}

https://tools.ietf.org/html/rfc4180

или

using Microsoft.VisualBasic.FileIO;

var path = @"C:\Person.csv"; // Habeeb, "Dubai Media City, Dubai"
using (TextFieldParser csvParser = new TextFieldParser(path))
{
 csvParser.CommentTokens = new string[] { "#" };
 csvParser.SetDelimiters(new string[] { "," });
 csvParser.HasFieldsEnclosedInQuotes = true;

 // Skip the row with the column names
 csvParser.ReadLine();

 while (!csvParser.EndOfData)
 {
  // Read current line fields, pointer moves to the next line.
  string[] fields = csvParser.ReadFields();
  string Name = fields[0];
  string Address = fields[1];
 }
}

http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html

или

Способ LINQ:

var lines = File.ReadAllLines("test.txt").Select(a => a.Split(';'));
var csv = from line in lines
          select (from piece in line
                  select piece);

^^ Неправильно - Редактировать Ник

Похоже, что первоначальный ответчик пытался заполнить csv 2-мерным массивом - массивом, содержащим массивы. Каждый элемент в первом массиве содержит массив, представляющий этот номер строки с каждым элементом во вложенном массиве, содержащем данные для этого конкретного столбца.

var csv = from line in lines
          select (line.Split(',')).ToArray();

Этот вопрос был полностью решен здесь:

Чтение CSV-файла и сохранение значений в массиве

...