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

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

05.09.2019, 14:12. Показов 5274. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru