Как взять определенный столбец из текстового файла (.txt) с разделителями с С#

У меня есть пример таких данных, данные находятся в текстовом файле (.txt), извините, я получил этот тип файла, если это excel или csv, возможно, это будет проще

Редактировать: я делаю консольное приложение с С#

FamilyID;name;gender;DOB;Place of birth;status
1;nicky;male;01-01-1998;greenland;married
1;sonia;female;02-02-1995;greenland;married
2;dicky;male;04-01-1995;bali;single
3;redding;male;01-05-1996;USA;single
3;sisca;female;05-03-1994;australia;married

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

Я уже пробовал некоторый код для чтения данных, получения всех данных и перечисления их в новый текстовый файл.

Цель состоит в том, чтобы создать новый текстовый файл на основе идентификатора семьи и взять только определенные столбцы.

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

DateTime date = DateTime.Now;
            string tgl = date.Date.ToString("dd");
            string bln = date.Month.ToString("d2");
            string thn = date.Year.ToString();
            string tglskrg = thn + "/" + bln + "/" + tgl;

            string filename = ("C:\\Users\\Documents\\My Received Files\\exampledata.txt");
            string[] liness = File.ReadAllLines(filename);
            string[] col;

            var lines = File.ReadAllLines(filename);


            var groups = lines.Skip(1)
                  .Select(x => x.Split(';')) 
                  .GroupBy(x => x[0]).ToArray();


            foreach (var group in groups)
            {
                Console.WriteLine(group);
                File.WriteAllLines(@"C:\\Users\\Documents\\My Received Files\\exampledata_"+group.Key+".txt", group.Select(x => string.Join(";", x)));
}

может кто поможет? Спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
441
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

попробуй это.

var list = new List<String>();
        list.Add("FamilyID;name;gender;DOB;Place of birth;status");
        list.Add("1;nicky;male;01-01-1998;greenland;married");
        list.Add("1;sonia;female;02-02-1995;greenland;married");
        list.Add("2;dicky;male;04-01-1995;bali;single");
        list.Add("3;redding;male;01-05-1996;USA;single");
        list.Add("3;sisca;female;05-03-1994;australia;married");

        var group = from item in list.Skip(1)
                    let splitItem = item.Split(';', StringSplitOptions.RemoveEmptyEntries)
                    select new
                    {
                        FamilyID = splitItem[0],
                        Name = splitItem[1],
                        Status = splitItem[5],
                    };

        foreach(var item in group.ToList())
        {
            Console.WriteLine($"Family ID: {item.FamilyID}, Name: {item.Name}, Status: {item.Status}");
        }
Ответ принят как подходящий

Один из способов приблизиться к этому — записать детали в структуру данных, а затем записать необходимые детали в файл. Например,

public class Detail
{
    public int FamilyID{get;set;}
    public string Name{get;set;}
    public string Gender{get;set;}
    public DateTime DOB{get;set;}
    public string PlaceOfBirth{get;set;}
    public string Status{get;set;}
}

Теперь вы можете написать метод, который анализирует строку на основе разделителя и возвращает IEnumerable.

public IEnumerable<Detail> Parse(string source,char delimiter)
{
    return source.Split(new []{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries)
          .Skip(1)
          .Select(x=> 
          {
            var detail = x.Split(new []{delimiter});
            return new Detail
            {
                FamilyID = Int32.Parse(detail[0]),
                Name = detail[1],
                Gender = detail[2],
                DOB = DateTime.Parse(detail[3]),
                PlaceOfBirth = detail[4],
                Status = detail[5]
            };
          }
          );

}

Клиентский звонок

Parse(stringFromFile,';');

Выход

Теперь вы можете выбрать и записать детали, которые хотите записать в выходной файл из коллекции.

хм, это применимо для консольного приложения?

user11548035 28.05.2019 04:21

Вы можете использовать его независимо от console/winform/wpf/web. Обратите внимание, что приложенное изображение является представлением вывода. Вы можете использовать консольное приложение для вывода коллекции или записи в файл

Anu Viswan 28.05.2019 04:23

Другие вопросы по теме