Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 31.03.2020
Сообщений: 2

Порядок и добавление слов в строку в CSV файле

04.10.2022, 06:34. Показов 489. Ответов 2

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Сразу скажу, что не супер спец. в программировании. Просто появилась некая задача, которую необходимо реализовать.
В чем суть, постараюсь максимально кратко:
Имеется следующий код в Form1.cs:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private static void ReadCsvFile()
        {
            string filePath = Form1.filePath;
            using (var streamreader = new StreamReader(filePath))
            {
                var config = new CsvConfiguration(CultureInfo.CurrentCulture) { Delimiter=";", Mode = CsvMode.NoEscape };
                using (var csvReader = new CsvReader(streamreader, config))
                {
                    csvReader.Context.RegisterClassMap<CsvFileClassMap>();
                    var records = csvReader.GetRecords<Csvfile>().ToList();
                    var v = records.ToString();
                    foreach (var record in records)
                    {
                        var TableLoads = record.LoadName;
                        var MainLoad = TableLoads.Replace("DL1", "Собственный вес");
                        var PermLoads = Regex.Replace(TableLoads, @"ПС1+\/+(\d*)=", "Постоянные нагрузки"); //ПС1+\/+(\d*)=
                        var CharLoads = Regex.Replace(TableLoads, @"ПС2+:+CHR+\/+(\d*)=", "Характеристические"); //ПС2+:+CHR+\/+(\d*)=
                        var FreLoads = Regex.Replace(TableLoads, @"ПС2+:+FRE+\/+(\d*)=", "Частые"); //ПС2+:+FRE+\/+(\d*)=
                        var QuasLoads = Regex.Replace(TableLoads, @"ПС2+:+QPR+\/+(\d*)=", "Квазипостоянные"); //ПС2+:+QPR+\/+(\d*)=
                        var onlyRSN = Regex.Replace(TableLoads, @"ПС[0-9]+.+([A-Z0-9])+.*\=", "");//ПС[0-9]+.+([A-Z0-9])+.*\=
                        Regex LoadLine1 = new Regex(@"1\*+[0-9]+\.[0-9][0-9]");                            
                        Regex LoadLine2 = new Regex(@"2\*+[0-9]+\.[0-9][0-9]");
                        Regex LoadLine3 = new Regex(@"3\*+[0-9]+\.[0-9][0-9]");
                        Regex LoadLine4 = new Regex(@"4\*+[0-9]+\.[0-9][0-9]");
                        Regex LoadLine5 = new Regex(@"5\*+[0-9]+\.[0-9][0-9]");
                        Regex LoadLine6 = new Regex(@"6\*+[0-9]+\.[0-9][0-9]");
                        Regex LoadLine7 = new Regex(@"7\*+[0-9]+\.[0-9][0-9]");
                        Regex LoadLine8 = new Regex(@"8\*+[0-9]+\.[0-9][0-9]");
                        Regex LoadLine9 = new Regex(@"9\*+[0-9]+\.[0-9][0-9]");
Код файла csvfile.csv:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    public class CsvFileClassMap : ClassMap<Csvfile>
    {
        public CsvFileClassMap()
        {
            Map(m => m.LoadName).Name("Название нагружения");
        }
    }
    public class Csvfile
    {
        [Name("Название нагружения")]
        public string LoadName { get; set; }
    }
}
Сам csvfile содержит информацию вида:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
";8;;ПС1/1=1*1.35 + 2*1.35 + 3*1.50;постоянная;Линейное сочетание"
";9;;ПС1/2=1*1.35 + 2*1.35 + 3*1.50 + 5*0.75;постоянная;Линейное сочетание"
";10;;ПС1/3=1*1.35 + 2*1.35 + 3*1.50 + 6*0.75;постоянная;Линейное сочетание"
";11;;ПС1/4=1*1.35 + 2*1.35 + 3*1.50 + 4*0.90;постоянная;Линейное сочетание"
";12;;ПС1/5=1*1.35 + 2*1.35 + 3*1.50 + 4*0.90 + 5*0.75;постоянная;Линейное сочетание"
";13;;ПС1/6=1*1.35 + 2*1.35 + 3*1.50 + 4*0.90 + 6*0.75;постоянная;Линейное сочетание"
";14;;ПС1/7=1*1.35 + 2*1.35 + 3*1.50 + 7*0.90;постоянная;Линейное сочетание"
";15;;ПС1/8=1*1.35 + 2*1.35 + 3*1.50 + 7*0.90 + 5*0.75;постоянная;Линейное сочетание"
";16;;ПС1/9=1*1.35 + 2*1.35 + 3*1.50 + 7*0.90 + 6*0.75;постоянная;Линейное сочетание"
";17;;ПС1/10=1*1.35 + 2*1.35;постоянная;Линейное сочетание"
";18;;ПС1/11=1*1.35 + 2*1.35 + 5*0.75;постоянная;Линейное сочетание"
";19;;ПС1/12=1*1.35 + 2*1.35 + 6*0.75;постоянная;Линейное сочетание"
";20;;ПС1/13=1*1.35 + 2*1.35 + 4*0.90;постоянная;Линейное сочетание"
";21;;ПС1/14=1*1.35 + 2*1.35 + 4*0.90 + 5*0.75;постоянная;Линейное сочетание"
";22;;ПС1/15=1*1.35 + 2*1.35 + 4*0.90 + 6*0.75;постоянная;Линейное сочетание"
";23;;ПС1/16=1*1.35 + 2*1.35 + 7*0.90;постоянная;Линейное сочетание"
";24;;ПС1/17=1*1.35 + 2*1.35 + 7*0.90 + 5*0.75;постоянная;Линейное сочетание"
";25;;ПС1/18=1*1.35 + 2*1.35 + 7*0.90 + 6*0.75;постоянная;Линейное сочетание"
";26;;ПС1/19=1*1.00 + 2*1.00 + 3*1.50;постоянная;Линейное сочетание"
";27;;ПС1/20=1*1.00 + 2*1.00 + 3*1.50 + 5*0.75;постоянная;Линейное сочетание"
";28;;ПС1/21=1*1.00 + 2*1.00 + 3*1.50 + 6*0.75;постоянная;Линейное сочетание"
";29;;ПС1/22=1*1.00 + 2*1.00 + 3*1.50 + 4*0.90;постоянная;Линейное сочетание"
";30;;ПС1/23=1*1.00 + 2*1.00 + 3*1.50 + 4*0.90 + 5*0.75;постоянная;Линейное сочетание"
";31;;ПС1/24=1*1.00 + 2*1.00 + 3*1.50 + 4*0.90 + 6*0.75;постоянная;Линейное сочетание"
Задача следующая:
1. Необходимо выстроить порядок в строке в файле csv в произведениях, опираясь на первую цифру, т.е должно быть 1*(коэф.)+2*(коэф.)+3*(коэф.) и т.д. В некоторых строках бывает 7*(коэф.)+5*(коэф.), а нужно 5*(коэф.)+7*(коэф.).

2. Также есть случаи, что в строке отсутствует четкая последовательность в произведениях может быть 1, 2, 3, 4, а может быть 1, 2, 5, 4 в связи отсутствия промежуточных произведений. Необходимо, чтобы при построении порядка (пункт 1), учитывались и промежуточные произведения, т.е. 1,2,3,4,5,6,7, где 3, 5 - значения отсутствуют, нужно добавить пропущенные произведения, т.е 3*0.00 + 4*0.00+5*0.00 (0.00 т.к. пропущено значение). Само количество произведений может быть до 10 штук, т.е. если строка заканчивается на 6*0.75, например, дальше продолжается 7*0.00+8*0.00 и т.д. до 10.

Сам csv file содержит и другой текст, я (как видно из кода) смог вытащить именно произведения. Для реализации пунктов 1 и 2, предполагал использование регулярных выражений: для произведения 1 - "(1\*+[0-9]+\.[0-9][0-9])", 2-"(1\*+[0-9]+\.[0-9][0-9])" и т.д. Посчитал, что регулярные выражения нужны по причине разных коэффициентов в произведении.
Застрял как раз на формировании порядка с данными регулярными выражениями. Понимаю, что ситуация запутанная) Хотя результат скорее всего в пару строк. Всем заранее спасибо, кто откликнется!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.10.2022, 06:34
Ответы с готовыми решениями:

Дан текстовый файл f. Записать в перевернутом виде строку файла f в файл g. Порядок слов в файле g должен
Дан текстовый файл f. Записать в перевернутом виде строку файла f в файл g. Порядок слов в файле g должен: а) совпадать с порядком...

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

Прочитать последнюю строку в CSV файле
Здравствуйте! Написал VB скрипт для чтения CSV файла в WinCC RT Pro. подскажите как сделать так чтоб скрипт читал последние значения в ...

2
2394 / 1923 / 763
Регистрация: 27.07.2012
Сообщений: 5,567
04.10.2022, 10:36
Лучший ответ Сообщение было отмечено torza как решение

Решение

Цитата Сообщение от torza Посмотреть сообщение
Хотя результат скорее всего в пару строк.
Ну как минимум, такое количество регулярных выражений точно не нужно. Оно, скорее всего, должно быть одно.

Более того, если структура строк ровно такая, как в примере, то можно обойтись и без регулярных выражений. Вот коротенький пример: https://onlinegdb.com/Bg-n0Rq4k

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Linq;
using System.Collections.Generic;
 
class Unit
{
    public int Index { get; set; }
    public double Value { get; set; }
    
    public override string ToString() => $"{Index}*{Value:F2}";
}
 
class UnitStorage
{
    public UnitStorage()
    {
        for (int i = 1; i <= 10; i++)
            units.Add(new Unit { Index = i });
    }
    
    public void SetUnit(int index, double value)
    {
        units.First(u => u.Index == index).Value = value;
    }
    
    public override string ToString()
    {
        return String.Join(" + ", units);
    }
    
    private List<Unit> units = new List<Unit>();
}
 
class Program
{
    static void Main()
    {
        string str = ";31;;ПС1/24=1*1.00 + 2*1.00 + 3*1.50 + 4*0.90 + 6*0.75;постоянная;Линейное сочетание";
        string ps = str.Split(";", StringSplitOptions.RemoveEmptyEntries)[1];
        string exp = ps.Split("=")[1];
        string[] unitsStr = exp.Split(" + ");
        
        UnitStorage units = new UnitStorage();
        foreach (string unit in unitsStr)
        {
            string[] el = unit.Split("*");
            units.SetUnit(int.Parse(el[0]), double.Parse(el[1]));
        }
        
        Console.WriteLine(units);
    }
}
Code
1
1*1.00 + 2*1.00 + 3*1.50 + 4*0.90 + 5*0.00 + 6*0.75 + 7*0.00 + 8*0.00 + 9*0.00 + 10*0.00
1
0 / 0 / 0
Регистрация: 31.03.2020
Сообщений: 2
04.10.2022, 10:43  [ТС]
То что нужно, спасибо! Сам бы с этим не разобрался)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.10.2022, 10:43
Помогаю со студенческими работами здесь

В текстовом файле поменять порядок слов на обратный
В текстовом файле поменять порядок слов на обратный, т.е. первое слово поменять с последним, второе - с предпоследним и т.д.

Как удалить выбранную строку в datagridview в файле csv?
Доброго дня. Подскажите как удалить выбранную строку в datagridview в файле csv? Добавляю данные так: Dim FullPath As String...

Поменять порядок слов в строках на обратный в текстовом файле
Была задача поменять порядок строк изначально(прикладываю реализацию). Теперь преподаватель просит поменять порядок слов в строках(сами...

Преобразовать строку, изменив порядок следования слов в строке на обратный
Помогите пожалуйста разобраться с решением. Такое условие &quot;Преобразовать строку, изменив порядок следования слов в строке на обратный&quot;...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru