Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574

Организовать эффективную работу с текстовыми файлами

13.12.2009, 15:50. Показов 1478. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

В NET'е совсем не давно, такую прогу лучше конечно в с++ (выигрыш быстродействия) писать, но пишу ради практики (изучения языка).

Долго бродил в просторах MSDN'а, гугла, решил все же создать тему.

VS 2008, C#, FrameWork 3.5

Есть задача - организовать эффективную работу (анализ) текстовых файлов (логов работы программ)
Поясняю - есть разные логи: лог сервера БД, лог работы вертушки и т. д., необходимо искать в этих логах ошибки (список ошибок известен, назовем их патерны), и дальше сообщать мол имеется ошибка.

Размеры файлов (логов) разные - от 2 Мб до 60 Мб, поэтому хочу реализовать такую схему:


1) читаем "реальный" лог программы, натыкаемся на ошибку
2) Запоминаем позицию ошибки (насколько я понял метод FileStream.Seek)
3) Всю строку с ошибкой записываем в "локальный" лог файл (для каждого "реального" файл лога, свой "локальный" лог файл в который сбрасываются ошибки)
4) сигнализируем о наличии ошибки
5)при следующей вычитке "реальный" лога программы, начинаем читать с запомненной позиции (насколько я понял метод FileStream.position)
значение position думаю держать первой строкой в "локальном" логе файла.

Начал пытаться осуществлять, сразу возникло несколько вопросов:


1) правильный ли наметил путь (может опытные люди найдут в чем поправить)?

2) вопросы в коде:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            FileStream RealFileLog = new FileStream(@"c:\bridge.log", FileMode.Open, FileAccess.Read, FileShare.Read);
            byte[] b = new byte[1024]; //насколько я правильно понял это буфер для записи прочитанных данных, в моей задаче важен размер 
                                       //этого буфера, когда буфер заполнен, он обнуляется или что с ним происходит?
            string sPattern = "Deadlock";
            while (RealFileLog.Read(b, 0, b.Length) > 0)
            {
               //возможно ли найти мой патерн с помощью String.IndexOf("мой патерн")
               //понимаю что IndexOf - метод String, но может есть какой-то не черезжопный метод:))) 
               //или все же использовать System.Text.RegularExpressions.Regex.IsMatch(temp.GetString(b), sPattern, 
               //System.Text.RegularExpressions.RegexOptions.IgnoreCase)
               //хочу использовать поменьше using'гов - System.Text.RegularExpressions, чтоб программа не  была громоздкой
 
 
            }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.12.2009, 15:50
Ответы с готовыми решениями:

Переделать работу с текстовыми файлами под работу с двоичными файлами
Здравствуйте. В этой программе идёт работа с текстовыми файлами, а нужно с двоичными. Можно ли как-то переделать? #include...

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

Разработать приложение, демонстрирующее работу с текстовыми файлами
Добрый день. Помогите решить две задачи на C++ Builder 6. Задача 1: Разработать приложение, демонстрирующее работу с текстовыми...

5
грызу канифоль
 Аватар для Vasiliy
45 / 22 / 3
Регистрация: 03.12.2008
Сообщений: 265
13.12.2009, 17:21
дай небольшой фрагмент лога, желательно с ошибкой. опираться над на синтаксис лога, имхо..
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
13.12.2009, 17:41
FreeWay,

1) правильный ли наметил путь (может опытные люди найдут в чем поправить)?

неправильный. тебе нужно изучить синтаксис команды grep, а на c# заняться чем-то действительно полезным (:
0
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574
13.12.2009, 18:40  [ТС]
Цитата Сообщение от Vasiliy Посмотреть сообщение
дай небольшой фрагмент лога, желательно с ошибкой. опираться над на синтаксис лога, имхо..
прога будет универсальной, ей надо текст (причем разной кодировки) и все, она перебирает текст и ищет заданное слово (предложение ошибки), какая разница какой синтаксис?

Добавлено через 1 минуту
Цитата Сообщение от Rififi Посмотреть сообщение
FreeWay,

1) правильный ли наметил путь (может опытные люди найдут в чем поправить)?

неправильный. тебе нужно изучить синтаксис команды grep, а на c# заняться чем-то действительно полезным (:
что то не понял grep это скриптовая команда или что это?? Есть ссылка? (на русском желательно)

обоснуй почему эту задачу не решать на c#?

Добавлено через 1 минуту
Цитата Сообщение от Rififi Посмотреть сообщение
FreeWay,

1) правильный ли наметил путь (может опытные люди найдут в чем поправить)?

а на c# заняться чем-то действительно полезным (:
например чем?
0
грызу канифоль
 Аватар для Vasiliy
45 / 22 / 3
Регистрация: 03.12.2008
Сообщений: 265
14.12.2009, 03:22
в какой кодировке пофигу. просто можно опираться на синтаксис лога, например:
[error009] чтото там сломалось.
[proc_started] процес запущен иль ещё чего...
дак вот, например ищем мы этот "[error009]" получаем индекс буквы и копируем этот текст до перевода строки, т.е. до "\n", и не волнуемся о том что вдруг лог скопирован не до конца =)
но это так, рассуждения....
0
 Аватар для FreeWay
84 / 84 / 19
Регистрация: 17.12.2007
Сообщений: 574
29.12.2009, 11:37  [ТС]
Цитата Сообщение от Vasiliy Посмотреть сообщение
в какой кодировке пофигу. просто можно опираться на синтаксис лога, например:

дак вот, например ищем мы этот "[error009]" получаем индекс буквы и копируем этот текст до перевода строки, т.е. до "\n", и не волнуемся о том что вдруг лог скопирован не до конца =)
но это так, рассуждения....
а почему кодировка пофиг??????
вопросы в коде

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
        public void RunAnalyzeLog()
        {
 
            for (int i = 0; i < CountTask; i++)
            {
                if (Tasks[i].State == 1)
                {
                    FileStream FSRealFileLog = new FileStream(@Tasks[i].PathToLog, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                    StreamReader RealFileLog = new StreamReader(FSRealFileLog, Encoding.Default);//Encoding.Default - тут приходиться манипулировать кодировкой чтоб патерн находился, можно как то вычислять кодировку?
                    RealFileLog.BaseStream.Position = Tasks[i].FilePosition;
 
                    //MessageBox.Show(Convert.ToString(RealFileLog.BaseStream.Position));
                    while ((line = RealFileLog.ReadLine()) != null)
                    {
 
                        for (int k = 0; k < Tasks[i].Paterns.Length; k++)
                        {
                            if (Regex.IsMatch(line, Tasks[i].Paterns[k], RegexOptions.IgnoreCase))
                            {
                                StreamWriter LocalLog = new StreamWriter(PathToApp + @"\Logs\" + Tasks[i].TaskName, true, Encoding.Unicode); // а здесь для универсальности я записываю в юникод, в редакторе файл просматриваеться нормально, но RichTextBoxLogs.LoadFile(Application.StartupPath + @"\Logs\" + Tasks[i].TaskName, RichTextBoxStreamType.PlainText); отображает крокозяблы
                                LocalLog.Write(line + "\n");
                                LocalLog.Close();
                                Tasks[i].NowErrors++;
                                //labelCountErrors.Text = Tasks[i].NowErrors.ToString();
                                checkedListBoxLogs.Items[i] = Tasks[i].TaskName + " - " + Tasks[i].NowErrors.ToString();
                            }
                        }
 
 
                    }
                    Tasks[i].FilePosition = RealFileLog.BaseStream.Position;
 
                    RealFileLog.Close(); // надо ли закрывать StreamReader ??
 
                }
 
            }
        }
и еще вопрос нормально ли при каждом анализе лога создавать FileStream FSRealFileLog = new... и т д
или более правильно где то выше их раз создать, а потом просто инициализировать и закрывать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.12.2009, 11:37
Помогаю со студенческими работами здесь

До каких пор магистральные линии электропередач сохраняют свою эффективную работу
Действительно ли магистральные линии электропередач единой энергетической системы государства сохраняют свою эффективную работу - сохраняют...

Работа с текстовыми файлами
Нужно создать текстовой файл, отобразить на экран, изменить текст, прочитать и измененный текст отобразить на экране , удалить файл. ...

работа с текстовыми файлами
Задание текстовый файл содержит натуральные числа. В другой файл поместить только те числа, корень из которых - натуральное число. ...

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

Работа с текстовыми файлами
Задача: написать программу, которая считывает слова из текстового файла. Слова разделены символом &quot;;&quot;. Нужно записать эти слова в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru