Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
9 / 9 / 0
Регистрация: 08.04.2021
Сообщений: 297

Найти количество строк в файле содержащие значения другого файла

09.09.2023, 20:31. Показов 698. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Произошел затык в части создания и обработки массива, подскажите кто чем может...

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
using System.Text;
public class Program
{
    public static void Main(string[] args)
    {
        string name = Environment.UserName;
        string path = @"C:\Users\Имя\Desktop";
        DirectoryInfo directory = new DirectoryInfo(path);
        FileInfo[] files = directory.GetFiles("*", SearchOption.AllDirectories);
        StreamWriter sw = new("C:\\Users\\Имя\\Desktop\\8888\\log.txt", true);  
 
        foreach (FileInfo f in files)
        {
            sw.WriteLine(" {0}, {1}", f, f.CreationTime);  // создан список файлов в текстовый файл log.txt (коллекция)
        }
        {   // Далее - 1. найти количество строк из списка log.txt содержащие значения (много) из arrayFKB.txt такие как например:
            // 65365621 
            // 65365622
            // 65365623
 
            // создать массив данных из файла?
            string[] arrayFKB = File.ReadAllLines(@"c:\Users\Имя\Desktop\archive23-08-07\ФКБ\arrayFKB.txt", Encoding.Default);
            // дальше не знаю куда копать..
 
            // Далее - 2. найти количество строк из списка log.txt содержащие значения из My Array.txt с сегодняшней датой:
 
            // Конечный результат - вывод на консоль:
            // Имя Пользователя: Вася:  количество папок "ФКБ": 2598, из них созданы сегодня: 152
            Console.WriteLine("\t" + name + ": " + "количество папок ФКБ всего: " + name +  " из них созданы " + DateTime.Now.ToLongDateString() + ": " + name);
        }
         Console.WriteLine($"\tНажмите любую клавишу для выхода...");
         Console.ReadKey();
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2023, 20:31
Ответы с готовыми решениями:

Число строк в файле, в котором адрес другого файла
Доброй ночи. Для тех, кто хорошо разбирается с файлами и модулями, наверно очень легкая задачка) Подскажите, пожалуйста, как это...

Найти в файле предложения, содержащие заданное количество слов
Помогите, пожалуйста, разобраться в программе: #include <string.h> #include <stdio.h> #include <conio.h> #include...

Найти в файле предложения, содержащие заданное количество слов
Помогите, пожалуйста, разобраться в программе: #include <string.h> #include <stdio.h> #include <conio.h> #include...

10
312 / 143 / 77
Регистрация: 23.08.2015
Сообщений: 455
10.09.2023, 09:53
Вот это желательно в using обернуть, ну или Dispose() в конце использовать:
C#
1
2
3
4
5
6
7
using (StreamWriter sw = new("C:\\Users\\Имя\\Desktop\\8888\\log.txt", true))
{
        foreach (FileInfo f in files)
        {
            sw.WriteLine(" {0}, {1}", f, f.CreationTime);  // создан список файлов в текстовый файл log.txt (коллекция)
        }
}
Добавлено через 2 минуты
Цитата Сообщение от ooos Посмотреть сообщение
// Далее - 2. найти количество строк из списка log.txt содержащие значения из My Array.txt с сегодняшней датой:
Что представляет из себя строка в arrayFKB.txt?

Добавлено через 2 минуты
И что в итоге должно совпасть - дата или еще что-то кроме даты?
Лучше пример совпадения из одно и другого файла.
1
9 / 9 / 0
Регистрация: 08.04.2021
Сообщений: 297
10.09.2023, 19:16  [ТС]
Tatarin78, благодарю за проявленный интерес по моему вопросу, постараюсь изложить суть подробнее..

// создан список файлов в текстовый файл log.txt (коллекция), в нём к примеру такие строки:

C:\Users\Имя\Desktop\тс\App\Plugins\wcx\ 7zip\lang\czech.lng, 02.08.2023 21:30:46
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365621\Файл_1.pdf, 09.09.2023 20:47:05
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365621\Файл_2.pdf, 09.09.2023 20:47:05
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365622\Файл_1.pdf, 10.09.2023 11:15:05
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365622\Файл_2.pdf, 10.09.2023 11:15:05
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365624\Файл_2.pdf, 10.09.2023 11:15:05
C:\Users\Имя\Desktop\IcoFXPortable\App\A ppInfo\appicon.ico, 23.10.2009 4:08:30
C:\Users\Имя\Desktop\тс\App\Plugins\wcx\ 7zip\lang\danish.lng, 02.08.2023 21:30:46
C:\Users\Имя\Desktop\IcoFXPortable\App\I coFX\Languages\Bosnian.lng, 21.06.2012 0:22:40
C:\Users\Имя\Desktop\тс\App\Plugins\wcx\ 7zip\lang\czech.lng, 02.08.2023 21:30:46
C:\Users\Имя\Desktop\тс\App\Plugins\wcx\ 7zip\lang\danish.lng, 02.08.2023 21:30:46

"Что представляет из себя строка в arrayFKB.txt?"
- В файле arrayFKB.txt содержатся шесть следующих строк:

65365621
65365622
65365623
65365624
65365625
65365626
________________________________________ ________________________________________ ______________

Задача в том, чтобы:

1. Найти количество строк в списке log.txt содержащие значения из arrayFKB.txt :
Такими строками будут:

C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365621\Файл_1.pdf, 09.09.2023 20:47:05
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365621\Файл_2.pdf, 09.09.2023 20:47:06
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365622\Файл_1.pdf, 10.09.2023 11:15:01
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365622\Файл_2.pdf, 10.09.2023 11:15:05
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365624\Файл_2.pdf, 10.09.2023 11:15:05

т.е. количество строк = 5 нет, не 5 (Эх, тут я не учёл еще одну операцию: дубли значений не считать, возможно
индекс должен решить эту проблему..)

Таким образом найденное количество строк (без дублей) = 3

2. Найти количество строк из списка log.txt содержащие значения из My Array.txt arrayFKB.txt с сегодняшней датой:
Строки содержащие значения из My Array.txt с сегодняшней датой (дата 10.09.2023 (время не читаем)) будут такими:

C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365622\Файл_1.pdf, 10.09.2023 11:15:01
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365622\Файл_2.pdf, 10.09.2023 11:15:05
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365624\Файл_2.pdf, 10.09.2023 11:15:05

Таким образом найденное количество строк (без дублей) = 2

Вывод на консоль: Количество папок "ФКБ": 3, из них созданы сегодня: 2

Примечание: arrayFKB.txt = My Array.txt Прошу прощения за ошибку, не исправил после переименования...

Добавлено через 27 минут
Цитата:
" 2) Единственное о чем не нужно забывать - это вызов Dispose() (или использование оператора using) у тех объектов, которые реализуют IDisposable. Это обязательно нужно делать, после того как объект вам стал не нужен. Обратите внимание: речь идет не о реализации метода Dispose в ваших классах, а о вызове Dispose у стандартных классов фреймворка. Таких классов (реализующих IDisposable) довольно много, например: FileStream, Pen, Graphics. Обычно это классы для работы с файлами, графикой, железом."

А это важно, так как списки log.txt и arrayFKB.txt могут накопить > 20 000 элементов, спасибо.
0
312 / 143 / 77
Регистрация: 23.08.2015
Сообщений: 455
11.09.2023, 16:15
Цитата Сообщение от ooos Посмотреть сообщение
Эх, тут я не учёл еще одну операцию: дубли значений не считать, возможно
индекс должен решить эту проблему..)
А если числа совпадают, но даты разные тогда как?
Или так не может быть?
0
9 / 9 / 0
Регистрация: 08.04.2021
Сообщений: 297
11.09.2023, 17:16  [ТС]
Цитата Сообщение от Tatarin78 Посмотреть сообщение
А если числа совпадают, но даты разные тогда как?
Или так не может быть?
Так не может быть, это папки с номерами ID, на практике папки с одинаковыми ID сливаются в одну автоматом.
0
312 / 143 / 77
Регистрация: 23.08.2015
Сообщений: 455
11.09.2023, 17:54
Лучший ответ Сообщение было отмечено ooos как решение

Решение

Проверяйте.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 static void Main(string[] args)
 {
     object obj = new object();
 
     string name = Environment.UserName;
 
     List<KeyValuePair<string, string>> matchedFiles = new List<KeyValuePair<string, string>>(); // коллекция содержащая ключ-значение коллекцию
 
     string[] files = File.ReadAllLines(@"D:\Work\log.txt", Encoding.Default);
 
     string[] arrayFKB = File.ReadAllLines(@"D:\Work\arrayFKB.txt", Encoding.Default);
 
     #region Последовательный поиск совпадений файлов 
     foreach (string file in files)
     {
         foreach (string fkb in arrayFKB)
         {
             if (file.IndexOf(fkb) > 0)
             {
                 matchedFiles.Add(new KeyValuePair<string, string>(fkb, file)); // добавляем все совпадения в имени файлов (ключ - строка из arrayFKB.txt, значение - строка из log.txt)
             }
         }
     }
     #endregion
 
     #region Параллельный поиск совпадений файлов (если слишком много файлов и критериев поиска)
     //Parallel.ForEach(files, (file) =>
     //{
     //    Parallel.ForEach(arrayFKB, (fkb) =>
     //    {
     //        if (file.IndexOf(fkb) > 0)
     //        {
     //            lock (obj)
     //            {
     //                matchedFiles.Add(new KeyValuePair<string, string>(fkb, file)); // добавляем все совпадения в имени файлов
     //            }
     //        }
     //    });
     //});
     #endregion
 
     for (int i = matchedFiles.Count - 1; i >= 0; i--) // KeyValuePair<string, string> item in keyValues)
     {
         try
         {
             DateTime.TryParse(matchedFiles[i].Value.Split(',')[1].Trim(), out DateTime dateTime); // разделяем по знаку ',' и преобразуем второе значение в дату
 
             if (dateTime.Date != DateTime.Today.Date)
             {
                 matchedFiles.RemoveAt(i); // сравниваем даты, при несовпадении удаляем
             }
         }
         catch { continue; }
     }
 
     List<KeyValuePair<string, string>> folders = matchedFiles.DistinctBy(x => x.Key).ToList(); // удаляем повторы по ключу
 
     foreach (var item in matchedFiles)
     {
         Console.WriteLine(item.Key);
         Console.WriteLine(item.Value);
     }
 
     Console.WriteLine();
     Console.WriteLine();
 
     foreach (var item in folders)
     {
         Console.WriteLine(item.Key);
         Console.WriteLine(item.Value);
     }
 
     Console.WriteLine("\n" + name + ": " + "количество папок ФКБ всего - " + matchedFiles.Count + "шт. Из них созданы " + DateTime.Now.ToLongDateString() + " - " + folders.Count + "шт.");
 }
1
312 / 143 / 77
Регистрация: 23.08.2015
Сообщений: 455
11.09.2023, 18:00
Образцы файлов для проверки приложил.
Миниатюры
Найти количество строк в файле содержащие значения другого файла  
Изображения
 
1
9 / 9 / 0
Регистрация: 08.04.2021
Сообщений: 297
11.09.2023, 19:04  [ТС]
Загрузил код в VS 2022, не понимаю почему у меня столь множественные подчеркивания блоков, которые по идее
должны были встать без проблем...
[ATTACH][/ATTACH]
Миниатюры
Найти количество строк в файле содержащие значения другого файла  
0
312 / 143 / 77
Регистрация: 23.08.2015
Сообщений: 455
12.09.2023, 01:02
Ищите лишнюю скобку
0
9 / 9 / 0
Регистрация: 08.04.2021
Сообщений: 297
12.09.2023, 19:40  [ТС]
Добрый вечер, сегодня загрузил код и никаких ошибок не оказалось, все скобки на месте. Видимо что-то было с VS2022. Код работает.

Что показал тест:
Вывод на консоль: Количество папок "ФКБ": Выводится лишь количество папок за "сегодняшний день" соответствующих значениям arrayFKB.txt и сюда входят дубли. Необходимо количество за всё время и без дублей.

Цитата:"
1. Найти количество строк в списке log.txt содержащие значения из arrayFKB.txt :
Такими строками будут:

C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365621\Файл_1.pdf, 09.09.2023
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365621\Файл_2.pdf, 09.09.2023
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365622\Файл_1.pdf, 10.09.2023
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365622\Файл_2.pdf, 10.09.2023
C:\Users\Имя\Desktop\archive23-08-07\ФКБ\65365624\Файл_2.pdf, 10.09.2023

т.е. количество строк = 5 нет, не 5 (Эх, тут я не учёл еще одну операцию: дубли значений не считать, возможно индекс должен решить эту проблему..)

Таким образом найденное количество строк (без дублей) = 3" Конец цитаты.

Уточнение - три за разные/все даты: 65365621\Файл..., 09.09.2023; 65365622\Файл..., 10.09.2023; 65365624\Файл..., 10.09.2023) принимая за "сегодняшний день" 10.09.2023
Т.е. все папки ФКБ содержащие значения из arrayFKB.txt = ( за сегодняшнюю дату + за все остальные). Видимо здесь требуется не сортировка/удаление по дате, а лишь удаление повторов.
Можно ли подкорректировать этот момент.

Далее всё работает хорошо/верно.

Однако, забегая вперёд, имеется пара желаемых дополнений следующего содержания:
1. Вывести на консоль только конечный результат кода для текущего UserName, строкой ("\n" + name + ": " + ....)
а полный результат направить в файл logResult.txt (для контроля программы или/и прочего).
2. Опять же не учёл, что в файле log.txt будут строки с file.FullName+CreationTime не одного, а нескольких пользователей, поэтому необходимо масштабировать/вывести результат в logResult.txt с разбивкой по всем. string[] user = { "UserName1", "UserName2", "UserName3", "UserName4" };
В дальнейшем предполагается корректное внедрение этого кода к основному небольшому уже работающему. В настоящее время при внедрении кода VS выдает одну ошибку.
Так же интересует способ материальной поддержки за предоставленную помощь в данной задаче.
0
9 / 9 / 0
Регистрация: 08.04.2021
Сообщений: 297
23.09.2023, 14:04  [ТС]
Tatarin78, всё прекрасно работает, огромное спасибо!
Так же интересует способ материальной поддержки за предоставленную помощь в данной задаче.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.09.2023, 14:04
Помогаю со студенческими работами здесь

Добавить в указанное место файла заданное количество строк, начиная с указанного места другого файла
Добавить в указанное место файла заданное количество строк, начиная с указанного места другого файла. Место задается номером строки. ...

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

В файле найти предложения, содержащие максимальное количество знаков пунктуации
Здравствуйте, нужна помощь с задачей: Написать программу, которая.считывает текст из файла и выводит на экран предложения, содержащие...

В файле input.txt записана информация из нескольких текстовых строк. Вывести содержимое этого файла на экран, посчитать количество в файле
В файле input.txt записана информация из нескольких текстовых строк. Вывести содержимое этого файла на экран, посчитать количество строк в...

[Fortran-90] Прочитать количество строк входного файла, и количество значений в этом файле
Как прочитать кол-во строк с входного файла и как посчитать кол-во значений в этом файле???


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru