Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786

Как правильно открыть TXT файл для чтения, например чтобы запихнуть в TextBox или просто загрузить в массив строк

17.09.2023, 18:23. Показов 3359. Ответов 82
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я ещё раньше не занимался этим вопросом с помощью API-функций, так как всегда работал с помощью стандартных методов VB6. А теперь, поняв фундаментальный недостаток VB6-метода (отсутствие поддержки юникода в именах файлов), я хочу научиться открывать/загружать стандартный текстовый файл с помощью API.

Итак, за это отвечает у нас функция ReadFile, но уважаемый The Trick, я посмотрел, загружает файлы каким-то странным, другим способом, через функции CreateFileMapping и MapViewOfFile, я если честно в этом ничего не понимаю. Смотрел описание этих функций так толком и не понял зачем их использовать вместо стандартного ReadFile.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2023, 18:23
Ответы с готовыми решениями:

GDI+ как освободить файл или открыть только для чтения
Добрый день! Занимаюсь написанием своего графического редактора на ассемблере. Последняя версия http://esm.ho.ua/Automat.html Нужна...

Как открыть доступ для чтения файла 'output.txt'?
Пример: program Project2; {$APPTYPE CONSOLE} uses SysUtils; var f1,f2:Text;

Как поток чтения (или записи) запихнуть в класс?
Здравствуйте!!! Ребят, подскажите пожалуйста, собственно, как запихнуть в класс поток ifstream? Че-то я озадачен оказался *-) Без...

82
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,670
Записей в блоге: 2
21.09.2023, 17:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от HackerVlad Посмотреть сообщение
Примерно 125 млск
у меня 47млск в vba
Ну преимущество api видно конечно. Если в цикле делать, будет заметно.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 17:15  [ТС]
testuser2, ну а если загрузить мегабайт 300 или 500 сам подумай. Целую секунду можно сэкономить.

Добавлено через 34 секунды
Цитата Сообщение от testuser2 Посмотреть сообщение
у меня 47млск в vba
какой у тебя процессор, что так быстро

Добавлено через 30 секунд
И не у всех людей такие мощные компьютеры
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,670
Записей в блоге: 2
21.09.2023, 17:18
Цитата Сообщение от HackerVlad Посмотреть сообщение
уже использовать Space$ не имеет смысла. Медленно будет. Я думал ты это знаешь.
Нет я спейс не очень ,лучше vbnullchar (перепутал сдесь с vbnullstring) vbnullchar это нуль, готовое место под запись

Добавлено через 2 минуты
Цитата Сообщение от HackerVlad Посмотреть сообщение
какой у тебя процессор, что так быстро
Ноутбуг, фирмы DNS ) процессор i5-3210m раньше в Дерт ралли на нем гонял
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 17:22  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Нет я спейс не очень ,лучше vbnullchar
Кому что нравится, хоть буквой Г можешь всё заполнить, но Space$ во всяком случае короче будет по написанию

Добавлено через 1 минуту
Цитата Сообщение от testuser2 Посмотреть сообщение
Ноутбуг, фирмы DNS ) процессор i5-3210m раньше в Дерт ралли на нем гонял
сколько ядер?

Добавлено через 2 минуты
testuser2, кстати если ты уж так любишь использовать String, то хотябы тогда используй String$ знак доллара, иногда, тоже может сэкономить кучу времени, на практике знаю, с долларом можно и пол секунды сэкономить даже
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,670
Записей в блоге: 2
21.09.2023, 17:22
2 ядра, 4 потока
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 17:27  [ТС]
Чтобы программа работала быстрее всегда так же используй Mid$ вместо простого Mid, разница в скорости будет заметна, если обрабатывать текст десятками, а то и сотнями мегабайт данных

Добавлено через 1 минуту
testuser2, а у меня 4 ядра и процессор вроде 3800 Мегагерц и всё равно медленнее, странно это конечно) Может в VB6 медленнее просто, не знаю)

Добавлено через 2 минуты
testuser2, хотя скорость в IDE VB6 и в EXE у меня одинаковая я посмотрел
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,670
Записей в блоге: 2
21.09.2023, 17:30
Цитата Сообщение от HackerVlad Посмотреть сообщение
так же используй Mid$ вместо простого Mid
Это я знаю, даже когда-то тестировал. Например arr() будет быстрее чем arr (variant) и т.д., на темах всех бывал уже про быстродействие. Есть много нюансов и много функций (если не большинство) которые если переписат на vb/vba-шный код, будет работать быстрее. VB не плохой старичек.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 17:34  [ТС]
testuser2, да и кстати String$ и Space$ имеет ограничение примерно на 500 Мб данных. В отличии от API. Хотя на самом деле строка должны быть до 2 Гб как минимум.

Добавлено через 1 минуту
testuser2, сам посмотри:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Command1_Click()
    Dim tick As Long
    Dim str As String
    
    tick = GetTickCount
    
    str = String$(260000000, vbNullChar) ' Работает! Примерно 500 Мб строки данных (по два байта на один символ)
    'str = String$(265000000, vbNullChar) ' Уже не работает! Недостаточно места в строке
    
    Print GetTickCount - tick ' Примерно 180 млск у меня в IDE VB6
End Sub
Добавлено через 2 минуты
Цитата Сообщение от testuser2 Посмотреть сообщение
VB не плохой старичек.
VB очень даже отличный старичок) и программы работают быстро, если правильно и грамотно писать)
0
21.09.2023, 17:37

Не по теме:

VB(VBA) в сфере макросов, абсолютный лидер по скорости и удобству, и конечно коду уже набито за 100 лет немеряно.

0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 17:41  [ТС]
testuser2, так что теперь, для выделения строки, используй связку PutMem4 и SysAllocStringLen/SysAllocStringByteLen
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
21.09.2023, 18:29
Цитата Сообщение от HackerVlad Посмотреть сообщение
The trick, вот переделал как ты просил:
Что будет если SysAllocStringByteLen зафейлится?

Цитата Сообщение от HackerVlad Посмотреть сообщение
If MidB$(stringbuffer, 1, 3) = ChrW(&HBBEF) & ChrB(&HBF) Then ' Если есть запись BOM
                   lpMultiByteStr = StrPtr(stringbuffer) + 3
                Else
                    lpMultiByteStr = StrPtr(stringbuffer)
                End If
Запись BOM бывает в разных форматах, я бы так не делал. Прочитал в байтовый массив первые несколько байт как у себя я делал.

Добавлено через 1 минуту
Цитата Сообщение от testuser2 Посмотреть сообщение
Но строка не работает, не хочет заполнять нулями.
Мб vbNullChar все-таки?
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 18:31  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Что будет если SysAllocStringByteLen зафейлится?
Когда это он фейлился ты мне скажи?
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
21.09.2023, 18:32
Цитата Сообщение от HackerVlad Посмотреть сообщение
Когда это он фейлился ты мне скажи?
Когда памяти не будет хватать.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 18:51  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Прочитал в байтовый массив первые несколько байт как у себя я делал.
Зачем мне байтовый массив если я могу работать сразу со строкой? Нормально у меня всё, я считаю.

Цитата Сообщение от The trick Посмотреть сообщение
Запись BOM бывает в разных форматах
Для UTF8 только в таком. Код ChrW(&HBBEF) & ChrB(&HBF) является нормальным вполне по моему.

Добавлено через 46 секунд
Ну могу ещё три ChrB соединить но это одно и тоже получится

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

Добавлено через 2 минуты
Думаешь MidB$(stringbuffer, 1, 3) медленно работать будет что ли. Думаю так же быстро как и сравнивать первые три байта из байтового массива.

Добавлено через 7 минут
Цитата Сообщение от The trick Посмотреть сообщение
Когда памяти не будет хватать.
Ну зафейлится так зафейлится. Пусть будет неожиданный крах программы тогда. Какая мне разница, слцчай один на миллион.

Добавлено через 50 секунд
Всё равно я регистрирую свою программу к перезапуску в случае сбоя

Добавлено через 5 минут
The trick, кстати говоря ты вот любишь использовать Space$ для выделения строки, а если у тебя зафелится эта команда? То вообще будет Run-time error 14 Недостаточно места в строке. Фиг ты проверишь хватит памяти или не хватит.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
21.09.2023, 19:04
Цитата Сообщение от HackerVlad Посмотреть сообщение
Зачем мне байтовый массив если я могу работать сразу со строкой? Нормально у меня всё, я считаю.
Со строкой медленней, чем непосредственно чтение из массива. Вот это:
Цитата Сообщение от HackerVlad Посмотреть сообщение
MidB$(stringbuffer, 1, 3) = ChrW(&HBBEF) & ChrB(&HBF)
- создает целую кучу ненужных команд, а если необходимо проверить несколько вариантов BOM'а то это вообще будет уже намного менее производительным. Вообще есть такое мнение что для бинарных данных нужно использовать массивы, для строк - строки. Если у тебя данные могут быть в формате UTF-16 то да, можно использовать стразу строки, а иначе это уже бинарные данные которые тебе необходимо конвертировать в строки.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Для UTF8 только в таком. Код ChrW(&HBBEF) & ChrB(&HBF) является нормальным вполне по моему.
Вот это создает 2 временных строки, затем создает 3 временную строку, потом 2 первые освобождаются, а затем и 3-я освобождается. Для чего все это когда нам нужно только проверить 3 байта? Проверка b(0) = &HEF ... будет намного быстрее и меньше по размеру.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Какая мне разница, слцчай один на миллион.
Да мне тоже, просто ты скинул код, я думал ты хочешь услышать мнение по этому коду.

Цитата Сообщение от HackerVlad Посмотреть сообщение
The trick, кстати говоря ты вот любишь использовать Space$ для выделения строки, а если у тебя зафелится эта команда?
Ну на сотни МБ я Space не использую обычно. Для мелких UFT-16 строк юзаю, а где теоретически может возникнуть ошибка там ставлю обработчики исключений и краха не будет.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 19:26  [ТС]
The trick, я проверю насколько быстрее будет с массивом. На миллисекунд 10 может)

Добавлено через 15 минут
The trick, переопределять границы массива лучше всего через ReDim Preserve или через просто ReDim?
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
21.09.2023, 19:46
HackerVlad, если тебе нужна макс скорость то лучше не массив юзать а просто память выделить. При выделении массива время тратится также на его зануление.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 19:50  [ТС]
The trick, переписал на байтовый массив - ничем не отличается по скорости вообще для 100 Мб

Добавлено через 2 минуты
The trick, пробую теперь на 200 Мб и смотрю и вижу что мой первоначальный вариант со строкой оказался быстрее по скорости

Добавлено через 50 секунд
Может конечно медленно работает ReDim Preserve byte_array(FileSize - 1) но факт остаётся фактом что со строкой мой первый код работает быстрее у меня

Добавлено через 1 минуту
842 ml строка
889 ml байтовый массив
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
21.09.2023, 19:50
HackerVlad, тебе уже написал что Redim зануляет память, а тебе не нужно это.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 20:08  [ТС]
Так что зря ты мне посоветовал на байтовый массив переходить

Добавлено через 1 минуту
Цитата Сообщение от The trick Посмотреть сообщение
то лучше не массив юзать а просто память выделить
Я не умею. Да и ты советовал именно байтовый массив. Сам же советовал. А оказалось это медленнее.

Добавлено через 1 минуту
The trick, ты мне советовал именно байтовый массив, ругая меня, что я использую строку. А оказалось что строка быстрее.

Добавлено через 2 минуты
Цитата Сообщение от The trick Посмотреть сообщение
а просто память выделить.
вот этого я делать не умею, да и ты говорил именно про массив мол якобы он быстрее будет чем мои строки

Добавлено через 51 секунду
The trick, вот, смотри сам:

Visual Basic
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Option Explicit
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, ByVal lpBuffer As Long, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Ptr As Long, ByVal Value As Long)
Private Declare Function SysAllocStringByteLen Lib "oleaut32" (ByVal olestr As Long, ByVal BLen As Long) As Long
Private Declare Function SysAllocStringLen Lib "oleaut32" (ByVal olestr As Long, ByVal BLen As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cbMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileW" (ByVal lpFileName As Long, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
 
Private Const OPEN_EXISTING As Long = 3
Private Const GENERIC_READ As Long = &H80000000
Private Const CP_UTF8 As Long = 65001
Private Const GENERIC_WRITE As Long = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const CREATE_ALWAYS = 2
Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
Private Const INVALID_HANDLE_VALUE As Long = -1
 
Public Function ReadFromTextFileUTF8(ByVal FileName As String) As String
    Dim hFile As Long
    Dim stringbuffer As String
    Dim numread As Long
    Dim FileSize As Long
    Dim nOutputCharLen As Long
    Dim lpMultiByteStr As Long
    
    hFile = CreateFile(StrPtr(FileName), GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
    
    If hFile <> INVALID_HANDLE_VALUE Then
        FileSize = GetFileSize(hFile, ByVal 0&) ' Этот метод только до 2Гб
        
        If FileSize > 0 Then
            PutMem4 VarPtr(stringbuffer), SysAllocStringByteLen(0&, FileSize) ' Мгновенно выделить память для строки
            
            If ReadFile(hFile, StrPtr(stringbuffer), FileSize, numread, ByVal 0&) > 0 Then
                If MidB$(stringbuffer, 1, 3) = ChrW(&HBBEF) & ChrB(&HBF) Then ' Если есть запись BOM
                    lpMultiByteStr = StrPtr(stringbuffer) + 3
                Else
                    lpMultiByteStr = StrPtr(stringbuffer)
                End If
                
                nOutputCharLen = MultiByteToWideChar(CP_UTF8, 0&, lpMultiByteStr, FileSize, 0&, 0&)
                If nOutputCharLen > 0 Then
                    PutMem4 VarPtr(ReadFromTextFileUTF8), SysAllocStringLen(0&, nOutputCharLen)
                    MultiByteToWideChar CP_UTF8, 0&, lpMultiByteStr, FileSize, StrPtr(ReadFromTextFileUTF8), nOutputCharLen ' Преобразовать кодировки
                End If
            End If
        End If
        
        CloseHandle hFile
    End If
End Function
 
Public Function ReadFileUTF(ByVal FileName As String) As String
    Dim hFile As Long
    Dim byte_array() As Byte
    Dim numread As Long
    Dim FileSize As Long
    Dim nOutputCharLen As Long
    Dim lpMultiByteStr As Long
    
    hFile = CreateFile(StrPtr(FileName), GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
    
    If hFile <> INVALID_HANDLE_VALUE Then
        FileSize = GetFileSize(hFile, ByVal 0&) ' Этот метод только до 2Гб
        
        If FileSize > 0 Then
            ReDim Preserve byte_array(FileSize - 1)
            
            If ReadFile(hFile, VarPtr(byte_array(0)), FileSize, numread, ByVal 0&) > 0 Then
                If byte_array(0) = &HEF And byte_array(1) = &HBB And byte_array(2) = &HBF Then ' Если есть запись BOM
                    lpMultiByteStr = VarPtr(byte_array(3))
                Else
                    lpMultiByteStr = VarPtr(byte_array(0))
                End If
                
                nOutputCharLen = MultiByteToWideChar(CP_UTF8, 0&, lpMultiByteStr, FileSize, 0&, 0&)
                If nOutputCharLen > 0 Then
                    PutMem4 VarPtr(ReadFileUTF), SysAllocStringLen(0&, nOutputCharLen)
                    
                    If Len(ReadFileUTF) = nOutputCharLen Then ' Если строка была успешно выделена (специально для The Trick) чтобы не придерался ко мне
                        MultiByteToWideChar CP_UTF8, 0&, lpMultiByteStr, FileSize, StrPtr(ReadFileUTF), nOutputCharLen ' Преобразовать кодировки
                    End If
                End If
            End If
        End If
        
        CloseHandle hFile
    End If
End Function
 
' Тестируем загрузку файла размером 180 Мб
Private Sub Command1_Click()
    Dim tick As Long
    Dim str As String
    
    tick = GetTickCount
    
    str = ReadFromTextFileUTF8("C:\Test\Test.txt") ' 843 ml
    
    Me.Caption = GetTickCount - tick
    
    Text1.Text = Mid$(str, 1, 1000)
End Sub
 
Private Sub Command2_Click()
    Dim tick As Long
    Dim str As String
    
    tick = GetTickCount
    
    str = ReadFileUTF("C:\Test\Test.txt") ' 889 ml
    
    Me.Caption = GetTickCount - tick
    
    Text1.Text = Mid$(str, 1, 1000)
End Sub
Добавлено через 53 секунды
The trick, ну вот я тебе и доказал, что ты был неправ, что массив быстрее будет

Добавлено через 11 минут
Цитата Сообщение от The trick Посмотреть сообщение
Проверка b(0) = &HEF ... будет намного быстрее
сама по себе эта проверка может и чуть быстрее, но использование байтового массива медленнее, кроме как ReDim я не знаю как определить массив ещё и вряд ли ты в своих кодах писал как-то иначе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2023, 20:08

Открыть файл и загрузить содержимое в TextBox
Доброго времени суток! Ребят помогите справиться с задачей есть код по открытие файла private void toolStripMenuItem2_Click(object...

Как расшифровать файл dat или просто открыть его и вывести на экран
Мне нужно открыть файл с расширением dat и вывести на экран Как это сделать, дайте пожалуйста примерный код

Открыть для записи текстовый файл data.txt и записать в него полученный массив, закрыть файл
Составить программу с подпрограммами для выполнения следующего алгоритма (предусмотреть процедуры записи и чтения информации из файла). ...

Как открыть файл для чтения?
некоторый дивайс пишет данные в текстовый файл , мне нужно не прерывая и не мешая дивайсу прочитать этот файл делаю так var ...

Файл: Как можно открыть файл txt и занести из него данные в массив?
как можно открыть файл txt и занести из него данные в массив, а после из этого массива вывести в выпадающий список значения? заранее...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru