получить информацию из CSV-файла на основе поиска имени C # - PullRequest
0 голосов
/ 03 мая 2019

Шаг 1: Я создал приложение на C # под названием: Сведения об ученике

Шаг 2: Добавил четыре текстовых поля и назвал их:

Изображение ниже для обозначения:

Studentname.Text
StudentSurname.Text
StudentCity.Text
StudentState.Text

ДАННЫЕ ВНУТРЕННЕГО ФАЙЛА CSV

vikas,gadhi,mumbai,maharashtra

prem,yogi,kolkata,maha

roja,goal,orissa,oya

ram,kala,goa,barka

Проблема заключается в том, как получить все данные (фамилия, город, штат) пользователя premв вышеприведенные текстовые поля имя ученика, имя студента, состояние ученика из файла csv при поиске имени в текстовом поле 1 => имя студента. Текст как прем *

Ниже приведен код, в котором я застрял при возврате нуля, и код внутри Load_Script_Click

void Connection_fetch_details(String searchName)
{
    var strLines = File.ReadLines(filePath);
    foreach (var line in strLines)
    {
        if (line.Split(',')[0].Equals(searchName))
        {
            Connection_fetch_details cd = new Connection_fetch_details()
            {
                username = line.Split(',')[1]
            };
        }
    }
    return;
}

private void Load_Script_Click(object sender, EventArgs e)
{
    // load script is button 

    String con_env = textenv.Text.ToString();
    //Address Address = GetAddress("vikas");
    //textsurname.text = Address.Surname

    Connection_fetch_details cd = Connection_fetch_details(con_env);
    textusername.Text = cd.username;
}

==============================================================
Class file name : Address.class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DDL_SCRIPT_GENERATOR
{
    public class Connection_fetch_details
    {
        public string username { get; set; }
    }
}

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

Основная проблема в том, что ваш метод - void, что означает, что он не возвращает никакого значения.Поэтому, даже если вы находите совпадение и создаете объект Connection_fetch_details, вы не возвращаете этот результат обратно вызывающему методу.

Это решит эту проблему:

Connection_fetch_details Connection_fetch_details(String searchName)
{
    var strLines = File.ReadLines(filePath);
    foreach (var line in strLines)
    {
        if (line.Split(',')[0].Equals(searchName))
        {
            Connection_fetch_details cd = new Connection_fetch_details()
            {
                username = line.Split(',')[1]
            };
            return cd; //return the object containing the matched username
        }
    }
    return null;
}

Теперь он вернет объект Connection_fetch_details, если есть совпадение, или null, если совпадения нет.


Затем вы спросили о возвращении всех полей, а не только одного.Для этого вам необходимо

a) добавить больше свойств к вашему объекту

b) добавить больше кода для заполнения этих свойств из CSV

c) добавить код для заполнениятекстовые поля с результатами объекта.

Я также собираюсь переименовать «username» в нечто более релевантное, поскольку ни одно из имен полей, которые вы описали в вопросе, не соответствует этому.Я также собираюсь переименовать ваш класс в «Ученик» и переименовать ваш метод поиска по той же причине.

Вот пример:

Student searchStudent(String searchName)
{
    var strLines = File.ReadLines(filePath);
    foreach (var line in strLines)
    {
        var split = line.Split(',');
        if (split[0].Equals(searchName))
        {
            Student s = new Student()
            {
                firstname = searchName,
                surname = split[1],
                city = split[2],
                state = split[3]
            };
            return s; //return the object containing the matched name
        }
    }
    return null;
}

private void Load_Script_Click(object sender, EventArgs e)
{
    // load script is button 

    String con_env = textenv.Text.ToString();
    //Address Address = GetAddress("vikas");
    //textsurname.text = Address.Surname

    Student st = searchStudent(con_env);
    textsurname.Text = st.surname;
    txtcity.Text = st.city;
    txtstate.Text = st.state;
}

namespace DDL_SCRIPT_GENERATOR
{
    public class Student
    {
        public string firstname { get; set; }
        public string surname { get; set; }
        public string city { get; set; }
        public string state { get; set; }
    }
}
1 голос
/ 03 мая 2019

Для достижения своей цели вы должны дополнительно разделить вашу проблему на более детальные этапы, а также провести различие между тем, что вы показываете в своем пользовательском интерфейсе, и какой информацией вы храните в фоновом режиме, в каком формате.

  1. Создайте класс с нужными свойствами

    public class Student { public string Name { get; set; } ... }
    
  2. Узнайте, как прочитать файл CSV в такой объект, используя существующую библиотеку, такую ​​как CsvHelper или CsvReader .

  3. Когда у вас есть что-то вроде List<Student> из этой части.Узнайте, как можно визуализировать такие вещи с помощью некоторого связывания (также зависит от того, какую визуализацию вы используете Winforms, WPF и т. Д.).
  4. В зависимости от компонента визуализации, который уже поддерживает фильтрацию, или вам нужно отфильтровать самостоятельноиспользуя, например, LINQ, чтобы получить соответствующие элементы students.Where(student => student.Name.StartsWith(search)).

Пока много мелких проблем, на которые просто нужно ответить в одной.Пожалуйста, попробуйте разбить свои проблемы на более мелкие и искать их решения.Если вы застряли, задайте новый вопрос.Это все, что я могу сделать для тебя сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...