Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533

Деление строк в файле

05.09.2019, 14:12. Показов 5811. Ответов 129

Студворк — интернет-сервис помощи студентам
Здравствуйте формучане. Есть идея сделать приложение, которое будет делить строки. Суть такова:

1) На компьютере, в разных местах, находится много *.txt файлов в которых много строк.
2) Содержаться они в кодировке UTF-8.
3) Файлы необходимо выбирать по кнопочке непосредственно в программе.
4) После выбора файлов они добавляются в список файлов которые необходимо отредактировать. (Допустим все выбранные файлы с помощью fileDialog мы добавляем в gridList).
5) После добавления необходимых файлов, по нажатию на кнопочку "Выполнить", те файлы которые мы добавили редактируются, список обновляется.

Буду рад любой помощи.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2019, 14:12
Ответы с готовыми решениями:

Деление строк массива по условию
Задан двумерный целочисленный массив F размером 9 на 9 элементов. Написать процедуру для деление на 10 элементов тех строк массива, которые...

Деление строк массива по условию
Задан двумерный целочисленный массив F размером 9 на 9 элементов. Написать процедуру для деление на 10 элементов тех строк массива, которые...

Чтение из файла строк и их деление по заданному сочетанию символов
Собственно сабж, имеется файл примерно такого содержания : "Название итема1(строка)" ^^ число1(int) ^^ число2(int) ^^ число3(int) ^^...

129
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
12.09.2019, 12:21  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от V_Monomax Посмотреть сообщение
Это понятно?
Такое я раньше не видел поэтому надо почитать, не совсем понятно.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
12.09.2019, 12:33
Цитата Сообщение от Damenikx Посмотреть сообщение
Такое я раньше не видел поэтому надо почитать, не совсем понятно.
да ладно, делали, и все было норм, ну раз вам нужна, то ловите мат часть! А так у вас даже в классе файла, только пока одни свойства!
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
12.09.2019, 12:35  [ТС]
Это я понимаю что в моём классе сейчас только свойства. Тут мы, я так понимаю, вызываем другой класс в классе, как свойство?
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
12.09.2019, 13:45
Цитата Сообщение от Damenikx Посмотреть сообщение
Тут мы, я так понимаю, вызываем другой класс в классе, как свойство?
вообще набор классов (массив), а так да.

Добавлено через 42 минуты
итак, у нас есть класс
C#
1
2
3
4
public class FileStorage
{
   public FileModel[] Files {get;set;}
}
Теперь сделаем его серриализованным, и позволим серриализовать в xml:
C#
1
2
3
4
5
6
7
8
9
10
using System.IO;
using System.Xml.Serialization;
 
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "", IsNullable = false)]
public class FileStorage
{
[XmlElement("FileModel")]
   public FileModel[] Files {get;set;}
}
теперь необходимо перед классом FileModel указать атрибут:
C#
1
[XmlType(AnonymousType = true)]
в классе FileModel над всеми свойствами кроме FileName, указать аттрибут:
C#
1
[XmlIgnore]
а над путем к файлу указать атрибут:
C#
1
[XmlText()]
Как сделаете, выкладывайте, посмотрим что у нас получается!
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
12.09.2019, 14:02  [ТС]
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
namespace DstrLines.FolderSpace
{
    [XmlType(AnonymousType = true)]
 
    class FileModel
    {
        [XmlText()]
 
        string fileName = Path.GetFileName(@"C:/1.txt");
        [XmlIgnore]
 
        public bool checkTxt
        {
            get
            {
                return Path.GetExtension(fileName).ToString().Equals(".txt");
            }
        }
        [XmlIgnore]
 
        public bool FileExist
        {
            get
            {
                return File.Exists(fileName);
            }
        }
    }
 
 
}
C#
1
2
3
4
5
6
7
8
9
10
namespace DstrLines.FolderSpace
{
    [XmlType(AnonymousType = true)]
    [XmlRoot(Namespace = "", IsNullable = false)]
    public class FileStorage
    {
        [XmlElement("FileModel")]
        public FileModel[] Files { get; set; }//тут ругается на Files
    }
}
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
12.09.2019, 14:44
Цитата Сообщение от Damenikx Посмотреть сообщение
/тут ругается на Files
а что говорит?

Добавлено через 2 минуты
Цитата Сообщение от Damenikx Посмотреть сообщение
class FileModel
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 {
 [XmlText()]
string fileName = Path.GetFileName(@"C:/1.txt");
 [XmlIgnore]
public bool checkTxt
 {
 get
 {
 return Path.GetExtension(fileName).ToString().Equals(".txt");
 }
 }
 [XmlIgnore]
public bool FileExist
 {
 get
 {
 return File.Exists(fileName);
 }
 }
 }
}
У вас не верно!
Должно быть:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
 [XmlText()]
public string fileName {get;set;}
 [XmlIgnore]
public bool checkTxt
 {
 get
 {
 return Path.GetExtension(fileName).ToString().Equals(".txt");
 }
 }
 [XmlIgnore]
public bool FileExist
 {
 get
 {
 return File.Exists(fileName);
 }
 }
 }
}
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
12.09.2019, 15:08  [ТС]
Цитата Сообщение от V_Monomax Посмотреть сообщение
а что говорит?
Ошибка CS0053 Несогласованность по доступности: доступность типа свойства "FileModel[]" ниже доступности свойства

Добавлено через 1 минуту
Цитата Сообщение от V_Monomax Посмотреть сообщение
У вас не верно!
Да, да, это я вывод на консоль делал для теста, забыл вернуть
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
12.09.2019, 15:22
задайте классу FileModel доступ паблик, т.е. у вас должно быть:
C#
1
public class FileModel{}...
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
12.09.2019, 15:51  [ТС]
Цитата Сообщение от V_Monomax Посмотреть сообщение
задайте классу FileModel доступ паблик, т.е. у вас должно быть:
Точно! Мог и сам догадаться
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
12.09.2019, 16:06
ок, теперь ваша задача, кхм, познакомится с xml сериализацией.
Для этого, создаете тест, не разучились?
В тесте создаете новую сущность для вашего хранилища, создаете массив для ваших файлов, и последовательно заполняете, любыми файлами (возьмите 2-3 пути к файлам, возможно и вовсе не существующим).
Затем делаете следующее:
C#
1
2
3
4
5
6
7
8
var res = "";
            using (TextWriter tw = new StringWriter())
            {
                var serialiser = new XmlSerializer(typeof(FileStorage));
                serialiser.Serialize(tw, _созданная_вами_сущность_FileStorage);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                res = tw.ToString();
            }
Console.WriteLine(res);
А далее смотрим и восхищаемся получившимся результатом)))
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
12.09.2019, 16:30  [ТС]
Цитата Сообщение от V_Monomax Посмотреть сообщение
Для этого, создаете тест, не разучились?
Сейчас узнаем )))

Цитата Сообщение от V_Monomax Посмотреть сообщение
В тесте создаете новую сущность для вашего хранилища, создаете массив для ваших файлов, и последовательно заполняете, любыми файлами (возьмите 2-3 пути к файлам, возможно и вовсе не существующим).
Я так понимаю это что - то вроде переменной, которая будет содержать в себе пути к файлам, допустим массив из строк с путями, верно, либо список.

Цитата Сообщение от V_Monomax Посмотреть сообщение
Затем делаете следующее:
Это в каком классе такое делать? Скорее всего в классе, которое определяет хранилище.

Добавлено через 7 минут
Цитата Сообщение от V_Monomax Посмотреть сообщение
Затем делаете следующее:
Это наверное в тест всё-таки))

Добавлено через 4 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
List<string> files = new List<string>();
            String sdira = "f:/123/";
 
            foreach (string d in Directory.GetDirectories(sdira))
            {
 
                foreach (string f in Directory.GetFiles(d, "*.*"))
                {
                    files.Add(f);
                }
            }
Подойдёт?

Добавлено через 4 минуты
Получилось вот так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void TestMethod1()
        {
            List<string> filesTest_FileStorage = new List<string>();
            String sdira = "f:/123/";
 
            foreach (string d in Directory.GetDirectories(sdira))
            {
 
                foreach (string f in Directory.GetFiles(d, "*.*"))
                {
                    filesTest_FileStorage.Add(f);
                }
            }
            var res = "";
            using (TextWriter tw = new StringWriter())
            {
                var serialiser = new XmlSerializer(typeof(filesTest_FileStorage));
                serialiser.Serialize(tw, filesTest_FileStorage);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                res = tw.ToString();
            }
            Console.WriteLine(res);
        }
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
12.09.2019, 16:37
Цитата Сообщение от Damenikx Посмотреть сообщение
Я так понимаю это что - то вроде переменной
верно.
Цитата Сообщение от Damenikx Посмотреть сообщение
которая будет содержать в себе пути к файлам
верно отчасти
Цитата Сообщение от Damenikx Посмотреть сообщение
допустим массив из строк с путями, верно, либо список
не верно, у вас будет массив из FileModel, который вы инжектируете в ваш класс FileStorage:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
var fms = new List<FileModel>();
fms.add(new FileModel{fileName=@"f:/123/"});
...
var fs =new FileStorage{Files=fms.ToArray()};
 
var res = "";
            using (TextWriter tw = new StringWriter())
            {
                var serialiser = new XmlSerializer(typeof(FileStorage));
                serialiser.Serialize(tw, fs);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                res = tw.ToString();
            }
Console.WriteLine(res);
Должно быть как-то так.

Добавлено через 2 минуты
Цитата Сообщение от Damenikx Посмотреть сообщение
Получилось вот так:
хреново получилось, при чем здесь наши классы, над которыми мы трудились?
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
12.09.2019, 16:58  [ТС]
Вот так должно получиться?
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
[TestMethod]
        public void TestMethod1()
        {
            var fms = new List<FileModel>();
            fms.Add(new FileModel { fileName = @"f:/123/" });
            List<string> filesTest_FileStorage = new List<string>();
            String sdira = "f:/123/";
 
            foreach (string d in Directory.GetDirectories(sdira))
            {
 
                foreach (string f in Directory.GetFiles(d, "*.*"))
                {
                    filesTest_FileStorage.Add(f);
                }
            }
            var fs = new FileStorage { Files = fms.ToArray() };
 
            var res = "";
            using (TextWriter tw = new StringWriter())
            {
                var serialiser = new XmlSerializer(typeof(FileStorage));
                serialiser.Serialize(tw, fs);//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                res = tw.ToString();
            }
            Console.WriteLine(res);
        }
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
12.09.2019, 17:06
Цитата Сообщение от Damenikx Посмотреть сообщение
List<string> filesTest_FileStorage = new List<string>();
String sdira = "f:/123/";
foreach (string d in Directory.GetDirectories(sdira))
{
foreach (string f in Directory.GetFiles(d, "*.*"))
{
filesTest_FileStorage.Add(f);
}
}
а это для чего???
добавляем сущности в набор вот так:
C#
1
fms.Add(new FileModel { fileName = @"f:/123/файл.txt" });
вам таких строк можно 3-4 сделать, а в качестве наказание за не понимание, то и все 10.
Цитата Сообщение от Damenikx Посмотреть сообщение
var fs = new FileStorage { Files = fms.ToArray() };
таким образом мы добавляем в свойство массив наших файлов...
Важно в таком тесте, что-бы файлы и пути к ним были вымышленными, и хранились в самом тесте!

Добавлено через 17 секунд
Цитата Сообщение от Damenikx Посмотреть сообщение
List<string> filesTest_FileStorage = new List<string>();
String sdira = "f:/123/";
foreach (string d in Directory.GetDirectories(sdira))
{
foreach (string f in Directory.GetFiles(d, "*.*"))
{
filesTest_FileStorage.Add(f);
}
}
а это для чего???
добавляем сущности в набор вот так:
C#
1
fms.Add(new FileModel { fileName = @"f:/123/файл.txt" });
вам таких строк можно 3-4 сделать, а в качестве наказание за не понимание, то и все 10.
Цитата Сообщение от Damenikx Посмотреть сообщение
var fs = new FileStorage { Files = fms.ToArray() };
таким образом мы добавляем в свойство массив наших файлов...
Важно в таком тесте, что-бы файлы и пути к ним были вымышленными, и хранились в самом тесте!
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
13.09.2019, 08:18  [ТС]
Вот что выдал тест:

<?xml version="1.0" encoding="utf-16"?>
<FileStorage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<FileModel>f:/НетНет/</FileModel>
<FileModel>f:/НетНет2/</FileModel>
<FileModel>f:/НетНет3/</FileModel>
<FileModel>f:/НетНет4/</FileModel>
<FileModel>f:/НетНет5/</FileModel>
<FileModel>f:/НетНет6/</FileModel>
<FileModel>f:/НетНет7/</FileModel>
<FileModel>f:/НетНет8/</FileModel>
<FileModel>f:/НетНет9/</FileModel>
<FileModel>f:/НетНет10/</FileModel>
</FileStorage>
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
13.09.2019, 08:38
Цитата Сообщение от Damenikx Посмотреть сообщение
Вот что выдал тест:
собственно то что и ожидалось)))
Поздравляю с созданием первого в жизни XML!!!
Ваши ощущения?
Как думаете, что дальше делать будем?
2
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
13.09.2019, 08:41  [ТС]
Цитата Сообщение от V_Monomax Посмотреть сообщение
Поздравляю с созданием первого в жизни XML!!!

Спасибо

Цитата Сообщение от V_Monomax Посмотреть сообщение
Как думаете, что дальше делать будем?
Явно работать с этим XML
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
13.09.2019, 12:08
Цитата Сообщение от Damenikx Посмотреть сообщение
Явно работать с этим XML
правильно, но только мы теперь должны его сохранить на жестком диске. Как это будем делать?
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
13.09.2019, 12:20  [ТС]
Читая литературу))

Добавлено через 13 секунд
Я же никогда с ним не работал, я и не знаю, как)
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
13.09.2019, 12:29
Цитата Сообщение от Damenikx Посмотреть сообщение
Я же никогда с ним не работал
хороший повод начать.
подсказка №1
Подсказка №2
по 2-ой подсказке, очень удобно взять код из теста, и незначительно переделать, правда, нужно его чутка переосмыслить.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2019, 12:29

Поиск строк в файле
Здравствуйте. Нужно в файле, например dll, exe, .., найти определённые строки, которые содержат пути к исходным текстам, и вывести...

Замена строк в файле
using System; using System.IO; using System.Linq; namespace ReadLine2 { class Program { static void...

Замена строк в файле
Привет! Допустим в файле несколько столбцов,например: Арбуз Груша Апельсин Арбуз Груша Яблоко.

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

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


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru