Как мне найти одну строку данных по id num? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь найти информацию о клиенте, используя идентификационные номера, и просто печатаю строку ID, Название, Имя над строкой inFile.Seek(0, SeekOrigin.Begin);, затем пропускаю время l oop и возвращаюсь к вводу. идентификатор клиента снова. Приложено изображение того, как это настроено в CSV-файле (фальшивая информация, очевидно :))

link to image

У меня есть ощущение, что я могу использовать inFile.Seek неправильно или recordIn не получает правильные данные для работы. Все, что я хочу сделать, это просто найти одну строку информации по номеру ID и распечатать следующую строку. Вот код:

{
    const char DELIM = ',';
    const double END = 000;
    const string FILENAME = "D:\\customers.csv";
    Customer cus = new Customer();
    FileStream inFile = new FileStream(FILENAME, FileMode.Open, FileAccess.Read);
    StreamReader reader = new StreamReader(inFile);
    string recordIn;
    string[] fields;
    int idNum;
    Write("  **Type " + END + " To Quit** Enter Customer ID Number> ");
    idNum = Convert.ToInt32(ReadLine());
    while (idNum != END)
    {
        WriteLine("{0,5}{1,10}{2,15}{3,15}{4,15}{5,25}\n", "ID", "Title", "First Name", "Last Name", "Gender", "DOB");
        inFile.Seek(0, SeekOrigin.Begin);
        recordIn = reader.ReadLine();
        while (recordIn != null)
        {
            string idd = cus.ID.ToString();
            string dob = cus.DOB.ToString();
            fields = recordIn.Split(DELIM);
            idd = fields[0];
            cus.Title = fields[1];
            cus.FirstName = fields[2];
            cus.LastName = fields[3];
            cus.Gender = fields[4];
            dob = fields[5];
            if (cus.ID == idNum)
                WriteLine("{0,5}{1,10}{2,15}{3,15}{4,15}{5,25}\n", idd, cus.Title, cus.FirstName, cus.LastName, cus.Gender, dob); ;
            recordIn = reader.ReadLine();

        }
        Write("  **Type " + END + " To Quit** Enter Customer ID Number> ");
        idNum = Convert.ToInt32(ReadLine());
    }
    reader.Close();
    inFile.Close();
}

Любая помощь будет оценена :))

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Используйте следующий код:

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

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"D:/customers.csv";
        const char DELIM = ',';
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader(FILENAME);
            List<Customer> customers = new List<Customer>();
            string recordIn = "";
            int rowCount = 0;
            while ((recordIn = reader.ReadLine()) != null)
            {
                recordIn = recordIn.Trim();
                if(recordIn.Length > 0)
                {
                    if(++rowCount > 1) //skip header row
                    {
                        Customer cus = new Customer();
                        string[] fields = recordIn.Split(new char[] { DELIM});

                        cus.idNum = int.Parse(fields[0]);
                        cus.Title = fields[1];
                        cus.FirstName = fields[2];
                        cus.LastName = fields[3];
                        cus.Gender = fields[4];
                        cus.DOB = DateTime.Parse(fields[5]);

                        customers.Add(cus);
                    }
                }
            }
            reader.Close();

            //get id number
            Customer customer = customers.Where(x => x.idNum == 123).First();
        }
    }
    public class Customer
    {
        public int idNum { get; set; }
        public string Title { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Gender { get; set; }
        public DateTime DOB { get; set; }
    }


}
0 голосов
/ 21 апреля 2020

Вам нужно создать Customer экземпляр после разделения строк, а также вам нужно пропустить первую строку, так как ее заголовок:

{
    const char DELIM = ';';
    const double END = 000;
    const string FILENAME = "D:\\customers.csv";
    Customer cus = new Customer();
    FileStream inFile = new FileStream(FILENAME, FileMode.Open, FileAccess.Read);
    StreamReader reader = new StreamReader(inFile);
    string recordIn;
    string[] fields;
    int idNum;
    Write("  **Type " + END + " To Quit** Enter Customer ID Number> ");
    idNum = Convert.ToInt32(ReadLine());
    while (idNum != END)
    {
        WriteLine("{0,5}{1,10}{2,15}{3,15}{4,15}{5,25}\n", "ID", "Title", "First Name", "Last Name", "Gender", "DOB");
        inFile.Seek(0, SeekOrigin.Begin);
        reader.ReadLine();
        recordIn = reader.ReadLine();
        while (recordIn != null)
        {

            fields = recordIn.Split(DELIM);

            cus.ID = Convert.ToInt32(fields[0]);
            cus.Title = fields[1];
            cus.FirstName = fields[2];
            cus.LastName = fields[3];
            cus.Gender = fields[4];
            cus.DOB = fields[5];

            if (cus.ID == idNum)
                WriteLine("{0,5}{1,10}{2,15}{3,15}{4,15}{5,25}\n", cus.ID, cus.Title, cus.FirstName, cus.LastName, cus.Gender, cus.DOB);
            recordIn = reader.ReadLine();

        }
        Console.Write("  **Type " + END + " To Quit** Enter Customer ID Number> ");
        idNum = Convert.ToInt32(ReadLine());
    }
    reader.Close();
    inFile.Close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...