Как читать данные из текстового файла и хранить в таблице базы данных с помощью С#?

#Softdrinks
Cola 2
Sprote 3
Fant 4
Redbull 2
#Pide-Lahmacun
Pide Mozarella 12
Pide Hackfleisch 12
Pide Feta-Hackfleisch 14
Pide Spinat 13
Pide Spinat-Ei 14

выше текстовый формат файла. здесь # определите название категории продукта. 'Cola 2' определите название продукта и цену. Где название продукта — Cola, а цена — 2. Теперь, как добавить эти данные в мою таблицу продуктов. Я использую С# и SQL. Спасибо.

Что вы пробовали?

Kunal Mukherjee 09.04.2019 13:01

Вместе с проблемой следует включите код, который у вас есть до этого момента (приложите некоторые усилия, чтобы ответить на вашу проблему/вопрос, поскольку Переполнение стека не является службой написания кода). После проводить больше исследований, если у вас есть проблема, вы можете отпишись что пробовал с четкое объяснение того, что не работает и предоставлением минимальный воспроизводимый пример. Я предлагаю прочитать Как задать хороший вопрос и Написание идеального вопроса. Также обязательно возьмите тур.

Igor 09.04.2019 13:04

Пробовал этот social.msdn.microsoft.com/Forums/vstudio/en-US/…

Sreedham Biswas 09.04.2019 13:33
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
3 865
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте следующий код для анализа текстового файла, а затем используйте строку для помещения в базу данных.

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


namespace ConsoleApplication108
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.txt";
        static void Main(string[] args)
        {
            StreamReader reader = new StreamReader(FILENAME);

            string line = "";
            string category = "";
            string pattern = @"(?'name'.*)\s+(?'price'\d+)";
            while ((line = reader.ReadLine()) != null)
            {
                line = line.Trim();
                if (line.Length > 0)
                {
                    if (line.StartsWith("#"))
                    {
                        category = line.Substring(1);
                    }
                    else
                    {
                        Match match = Regex.Match(line, pattern);
                        string name = match.Groups["name"].Value.Trim();
                        string price = match.Groups["price"].Value.Trim();

                        Console.WriteLine("category : '{0}', name : '{1}', price : '{2}'", category, name, price);

                    }
                }
            }
            Console.ReadLine();
        }
    }
}

Вы можете использовать что-то подобное для записи в базу данных. Просто создайте свое SQL-соединение. Я бы предложил использовать структуру сущности. Взгляните на эту ссылку для структуры сущности. Вставка данных с использованием модели Entity Framework

    public int InsertItem(string item1, string item2, string item3)
    {
        using (var connection = CreateDBConnection())
        using (var command = connection.CreateCommand())
        {
            command.CommandText = @"
                INSERT dbo.TableName(item1, item2, item3)
                OUTPUT Inserted.Id
                VALUES (@item1, @item2, @item3)";

            command.Parameters.Add(new SqlParameter("@item1", item1));
            command.Parameters.Add(new SqlParameter("@item2", item2));
            command.Parameters.Add(new SqlParameter("@item3", item3));

            connection.Open();
            return (int)command.ExecuteScalar();
        }
    }

Вы можете попробовать что-то вроде этого:

  1. Разделить по новым строкам
  2. Найдите совпадающие строки по регулярному выражению
  3. Выберите группу захвата 1 и 2
  4. Сопоставьте группы с анонимным типом
  5. Сделать пустую таблицу данных
  6. Заполните DataTable сейчас.

Регулярное выражение: (.*?)\s(\d+)

Объяснение регулярного выражения:

1st Capturing Group (.*?)
.*? matches any character (except for line terminators)
*? Quantifier — Matches between zero and unlimited times, as few times as possible, expanding as needed (lazy)

\s matches any whitespace character (equal to [\r\n\t\f\v ])

2nd Capturing Group (\d+)
\d+ matches a digit (equal to [0-9])
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)

Код:

string contents = File.ReadAllText(@"test.txt");

string pattern = @"(.*?)\s(\d+)";

var query = contents.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
                .Where(x => Regex.IsMatch(x, pattern))
                .Select(x => Regex.Match(x, pattern))
                .Select(x => new
                {
                    Name = x.Groups[1].Value,
                    Value = Convert.ToInt32(x.Groups[2].Value)
                });

DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn("Name", Type.GetType("System.String")));
dataTable.Columns.Add(new DataColumn("Value", Type.GetType("System.Int32")));

foreach (var item in query)
{
    DataRow dr = dataTable.NewRow();
    dr["Name"] = item.Name;
    dr["job1"] = item.Value;
    dataTable.Rows.Add(dr);
}

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