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

Чтение отдельных слов из текстового файла (.tex, .log)

04.12.2020, 18:50. Показов 702. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
У меня появилась такая необходимость, как: чтение строк из лог файла и проводить проверку на строку "2020-12-05T01:32:30.410+10:00| vmx| I005: VNET: MACVNetConnectToNetwork 'Ethernet0' notify available.", то есть когда в лог файле замечена эта строка и она соответствует времени компьютера, то выводится в консоль эта строка.
Я это сделал, вот код:
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
using UnityEngine;
using System.IO;
 
 
public class EthernetTest : MonoBehaviour
{
    public string hour, minut, day, mounth, year, seconds, chasformat, mseconds, piz, dec;
    private string path = @"C:\Users\MaxWimber\Documents\Virtual Machines\va_vipnet_base_x86_64_4.3.2-3680\vmware.log";
    private void Update()
    {
        var currentDate = System.DateTime.Now;
        hour = currentDate.ToString("HH");
        minut = currentDate.ToString("mm");
        day = currentDate.ToString("dd");
        mounth = currentDate.ToString("MM");
        year = currentDate.ToString("yyy");
        seconds = currentDate.ToString("ss");
        chasformat = currentDate.ToString("zzz");
        mseconds = currentDate.ToString("fff");
        piz = year + "-" + mounth + "-" + day + "T" + hour + ":" + minut + ":" + seconds + "." + mseconds + chasformat + "| vmx| I005: VNET: MACVNetConnectToNetwork 'Ethernet0' notify available.";
 
        using (FileStream sr = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            
            using (StreamReader file = new StreamReader(sr, System.Text.Encoding.Default))
            {
                string line;
                while ((line = file.ReadLine()) != null)
                {
                    dec = line;
 
                    if (dec == piz)
                    {
                        print(line);
                    }
                }
            }
 
        }
 
    }
}
В чем, собственно, проблема. А проблема в том, что мешают миллисекунды ("2020-12-05T01:32:30.410+10:00| vmx| I005: VNET: MACVNetConnectToNetwork 'Ethernet0' notify available."), т.к. иной раз "dec" с "piz" не совпадают, из-за того, что у них разные значения по миллисекундам.
Как мне прочитать файл .log и записать в переменную dec без миллисекунд (.410)?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.12.2020, 18:50
Ответы с готовыми решениями:

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

Чтение из текстового файла строк или слов в произвольном порядке
Доброго Времени суток! Продолжаю писать проект. Есть такое задание: Пользователю из текстового файла(txt.txt) выдается слово в Label ...

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

8
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,405
Записей в блоге: 14
04.12.2020, 19:06
Цитата Сообщение от MaxWimber Посмотреть сообщение
var currentDate = System.DateTime.Now;
hour = currentDate.ToString("HH");
minut = currentDate.ToString("mm");
day = currentDate.ToString("dd");
mounth = currentDate.ToString("MM");
year = currentDate.ToString("yyy");
seconds = currentDate.ToString("ss");
chasformat = currentDate.ToString("zzz");
mseconds = currentDate.ToString("fff");
piz = year + "-" + mounth + "-" + day + "T" + hour + ":" + minut + ":" + seconds + "." + mseconds + chasformat
А чего не написать просто
C#
1
piz = $"{DateTime.Now:yyy-MM-ddTHH:mm:ss.zzzfff}"
?
1
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
04.12.2020, 19:06
Цитата Сообщение от MaxWimber Посмотреть сообщение
Как мне прочитать файл .log и записать в переменную dec без миллисекунд (.410)?
Цитата Сообщение от MaxWimber Посмотреть сообщение
+ seconds + "." + mseconds
Ну а сравнить, просто сравнить по всем значениям кроме миллисекунд
0
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,405
Записей в блоге: 14
04.12.2020, 19:08
Цитата Сообщение от MaxWimber Посмотреть сообщение
Как мне прочитать файл .log и записать в переменную dec без миллисекунд (.410)?
Регулярные выражения ещё.

Цитата Сообщение от MaxWimber Посмотреть сообщение
то есть когда в лог файле замечена эта строка и она соответствует времени компьютера, то выводится в консоль эта строка.
А можно узнать, зачем и почему?
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
04.12.2020, 19:42
MaxWimber, дату желательно сравнивать с датой как DateTime и не хранить дату как локальное время.

Без спанов:
C#
1
2
3
4
5
6
7
8
9
using System;
 
string log = "2020-12-05T01:32:30.410+10:00| vmx| I005: VNET: MACVNetConnectToNetwork 'Ethernet0' notify available.";
DateTime date1 = DateTime.Parse(log[0..log.IndexOf('|')]);
date1 = date1.AddMilliseconds(-date1.Millisecond).ToUniversalTime();
 
DateTime date2 = new DateTime(2020, 12, 5, 1, 32, 30, 0, DateTimeKind.Utc).AddHours(-10);
 
Console.WriteLine(date1 == date2);
Со спанами:
C#
1
2
3
4
5
6
7
8
9
10
using System;
 
string log = "2020-12-05T01:32:30.410+10:00| vmx| I005: VNET: MACVNetConnectToNetwork 'Ethernet0' notify available.";
ReadOnlySpan<char> dateSpan = log.AsSpan().Slice(0, log.IndexOf('|'));
DateTime date1 = DateTime.Parse(dateSpan);
date1 = date1.AddMilliseconds(-date1.Millisecond).ToUniversalTime();
 
DateTime date2 = new DateTime(2020, 12, 5, 1, 32, 30, 0, DateTimeKind.Utc).AddHours(-10);
 
Console.WriteLine(date1 == date2);
1
1 / 1 / 0
Регистрация: 23.05.2019
Сообщений: 15
05.12.2020, 16:11  [ТС]
Все решил!
Нашел, вот эту штучку:
C#
1
dec = dec.[COLOR="Red"]Remove(20, 3)[/COLOR];
. Просто обрезал миллисекунды. Где 20 - это индекс символа с которого необходимо удалять символы, а 3 - это сколько символов обрезать, начиная с 20-го символа (символы нумеруются с 0...).
Вот полностью код:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using UnityEngine;
using System.IO;
using System.Windows;
using System;
 
public class EthernetTest : MonoBehaviour
{
    private string hour, minut, day, mounth, year, seconds, chasformat, piz, piz2, dec;
    private bool On;
    private string path;
    private string str;
    public string AnimationInp;
    public string AnimationOut;
    private bool clicked;
 
    private void Update()
    {
        //Считываем из файла name.txt путь к файлу
        StreamReader streamReader = new StreamReader("name.txt");
        str = "";
 
        while (!streamReader.EndOfStream)
        {
            str += streamReader.ReadLine();
        }
        streamReader.Close();
 
        //Добавляем к пути название файла
        path = str+"\\"+"vmware.log";
 
        //Присваиваем к переменным определенные еденицы времени
        var currentDate = System.DateTime.Now;
        hour = currentDate.ToString("HH"); //Часы
        minut = currentDate.ToString("mm"); //Минуты
        day = currentDate.ToString("dd"); //Дни
        mounth = currentDate.ToString("MM"); //Месяцы
        year = currentDate.ToString("yyy"); //Года
        seconds = currentDate.ToString("ss"); //Секунды
        chasformat = currentDate.ToString("zzz"); //Часовой формат
 
        //По этим строкам будет сравниваться строка найденная в документе .log
        //На проверку Подключения Ethernet0
        piz = year + "-" + mounth + "-" + day + "T" + hour + ":" + minut + ":" + seconds + "." + chasformat + "| vmx| I005: VNET: MACVNetConnectToNetwork 'Ethernet0' notify available.";
        //На проверку отключения Ethernet0
        piz2 = year + "-" + mounth + "-" + day + "T" + hour + ":" + minut + ":" + seconds + "." + chasformat + "| vmx| A000: ConfigDB: Unsetting \"ethernet0.connectionType\"";
 
        //Считывает информацию с файла vmware.log и даем доступ к ней, с помощью FileShare.ReadWrite
        using (FileStream sr = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            using (StreamReader file = new StreamReader(sr, System.Text.Encoding.Default))
            {
                //Записываем по строчно информацию с файла в стринговую переменную line 
                string line;
                while ((line = file.ReadLine()) != null)
                {
                    //Присваиваем к dec переменную line
                    dec = line;
                    //Обрезаем миллисекунды. Где 20 - это индекс символа с которого необходимо удалять символы, а 3 - это сколько символов обрезать, начиная с 20-го символа (символы нумеруются с 0...).
                    dec = dec.Remove(20, 3);
                    
                    //Сравниваем обрезанную строку dec с строкой piz, если они равны, то On принимает значение "Истина"(true)
                    if (dec == piz)
                    {
                        
                        On = true;
                        
                    }
                    //Сравниваем обрезанную строку dec с строкой piz2, если они равны, то On принимает значение "Ложь"(false)
                    else if (dec == piz2)
                    {
                        
                        On = false;
                        
                    }
                }
            }
 
        }
        //Если On "Истина", то запускается анимация
        if (On == true)
        {
            if (!clicked)
            {
                clicked = true;
                GetComponent<Animation>().Play(AnimationInp);
            }
        }
        //Иначе если On "Ложь", то запускается другая анимация
        else if (On == false)
        {
            if (clicked)
            {
                clicked = false;
                GetComponent<Animation>().Play(AnimationOut);
            }
        }
 
    }
}
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
05.12.2020, 16:12
Цитата Сообщение от MaxWimber Посмотреть сообщение
Просто обрезал миллисекунды.
Потом пользователи будут писать гневные отзывы: "а чиво игра лагает?". Мало того, что это все дело использует много памяти в методе Update, так еще и возможна утечка памяти.

C#
1
GetComponent<Animation>()
Где вас учат такой глупости в методе Update? Даже в официальной документации я таких примеров не видел.
0
1 / 1 / 0
Регистрация: 23.05.2019
Сообщений: 15
05.12.2020, 16:22  [ТС]
Update - это функция (или процедура) из программы Unity5.
Извините за мою тупость в программировании, я в нем очень зеленый, еле как склепал это безобразие, но оно работает, хоть и костыльно.

Добавлено через 3 минуты
Цитата Сообщение от I2um1 Посмотреть сообщение
использует много памяти в методе Update, так еще и возможна утечка памяти.
Просто я другого способа не знаю, как постоянно мониторить .log
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
05.12.2020, 22:37
Цитата Сообщение от MaxWimber Посмотреть сообщение
Update - это функция (или процедура) из программы Unity5.
Update - это метод, который вызывается каждый фрейм. Если в секунде 60 фреймов, то метод вызывается 60 раз в секунду. По этой же причине не следует вызывать медленный метод GetComponent каждый фрейм.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.12.2020, 22:37
Помогаю со студенческими работами здесь

Чтение слов из текстового файла и замена этими словами названий переменных в других файлах (оптимизация)
Здравствуйте, помогите с оптимизацией кода Программа читает слова из текстового файла и заменяет этими словами названия переменных и т.д...

Чтение с текстового файла и добавить к списку текстового файла случайный индекс
Здравствуйте! Помогите пожалуйста решить задачу! Задача такова: ''Создаёться txt файл (простой файл и туда самостоятельно записывается...

Чтение log-файла
Всем привет. Есть некая программа, записывающая в log-файл (console.log) свои действия. Я делаю свою программу, которая должна открыть этот...

Замена слов одного текстового файла словами из другого текстового файла
Даны два текстовых файла f1 и f2. Файл f1 содержит произвольный текст. Слова в тексте разделены пробелами и знаками препинания. Файл f2...

Чтение отдельных байт из файла
Здравствуйте господа форумчане. Предложите варианты решения проблемы. Есть файл в нём записано N количество байт, мне нужно получить в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru