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

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

17.09.2023, 18:23. Показов 3365. Ответов 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
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
17.09.2023, 21:23  [ТС]
Студворк — интернет-сервис помощи студентам
The trick, хорошо, спасибо)))

Добавлено через 1 час 35 минут
Осталось только написать код здесь для загрузки TXT файла
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
17.09.2023, 21:26
Цитата Сообщение от HackerVlad Посмотреть сообщение
Осталось только написать код здесь для загрузки TXT файла
TXT файл сам по себе не интересен, т.к. там могут быть данные в разных форматах, поэтому я и сделал отдельный класс. К слову также работает и блокнот, анализируя данные и конвертируя в юникод.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
17.09.2023, 21:34  [ТС]
Осталось только написать код здесь для загрузки TXT файла
Цитата Сообщение от The trick Посмотреть сообщение
К слову также работает и блокнот, анализируя данные и конвертируя в юникод
Если честно, блокнот у меня фигово работает! Без записи BOM не определяет нормально UTF8? русский текст в итоге коверкает

Добавлено через 6 минут
У тебя может и по лучше бы определило, без BOM!?
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
18.09.2023, 07:23
С помощью ADO можно открывать и конвертировать текст файл. Вот, допустим, пример из нета
The ADODB Stream class can be used to work with streams of binary or text data. The Stream class can be used to create UTF-8 text files.
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
Public Sub WriteToTextFileUTF8(FilePath As String, TextContent As String)
 
    Dim S As Object 'ADODB.Stream
    Set S = CreateObject("ADODB.Stream")
 
    Dim S1 As Object 'ADODB.Stream
    Set S1 = CreateObject("ADODB.Stream")
 
    With S
        .Type = 2 'adTypeText
        .Charset = "UTF-8"
        .Open
        .WriteText TextContent
        .Position = 3
        With S1
            .Type = 1 'adTypeBinary
            .Open
            S.CopyTo S1
            .SaveToFile FilePath, 2 'adSaveCreateOverWrite
            .Close
        End With
        .Close
    End With
 
End Sub
Public Function ReadFromTextFileUTF8(FilePath As String) As String
 
    Dim ADOStream As Object
    Dim OutputText As String
 
    Set ADOStream = CreateObject("ADODB.Stream")
 
    With ADOStream
        .Charset = "UTF-8"
        .Open
        .LoadFromFile FilePath
        OutputText = .ReadText()
    End With
 
    ADOStream.Close
    Set ADOStream = Nothing
 
    ReadFromTextFileUTF8 = OutputText
 
End Function
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
18.09.2023, 10:53  [ТС]
testuser2, и чё? это работает что ли?

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

WriteToTextFileUTF8 "C:\123.txt", "12345р"

ну вродебы всё хорошо, но файл с сохраняется без записи BOM поэтому ни блокнот ни что либо ещё не понимает русский символ "р"

Добавлено через 2 минуты
но скриптик интересный очень конечно надо бы его ещё в XP проверить

Добавлено через 51 секунду
хотя вообще я приверженец API так как WMI не всегда работает
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
18.09.2023, 11:27
HackerVlad, попробуй так
Visual Basic
1
2
3
4
5
6
7
8
9
    With S
        .Type = 2 'или 1 или вообще закомментируй строку
        .Charset = "UTF-8"
        .Open
        .WriteText TextContent
        .Position = 0
        .SaveToFile FilePath, 2 'adSaveCreateOverWrite
        .Close
    End With
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
18.09.2023, 13:20  [ТС]
testuser2, да, так работает, вместе с записью BOM получается! и кода кстати гораздо меньше:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Sub WriteToTextFileUTF8(FilePath As String, TextContent As String)
    Dim S As Object
    Set S = CreateObject("ADODB.Stream")
    
    With S
        .Type = 2
        .Charset = "UTF-8"
        .Open
        .WriteText TextContent
        .Position = 0
        .SaveToFile FilePath, 2
        .Close
    End With
End Sub
Добавлено через 5 минут
Сейчас ещё в XP проверим!

Добавлено через 5 минут
Да, и в икспи работает тоже! Только что проверил!

Добавлено через 3 минуты
Но я всё равно сейчас пользуюсь кодом на API, я всё же доверяю больше API

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
    Dim str As String
    Dim arr() As Byte
    Dim hFile As Long
    Dim nOutputByteLen As Long
    
    str = "ля ля ля тополя"
    
    If Len(str) > 0 Then
        nOutputByteLen = WideCharToMultiByte(CP_UTF8, 0&, StrPtr(str), Len(str), 0&, 0&, 0&, 0&)
        
        If nOutputByteLen > 0 Then
            ReDim arr(nOutputByteLen + 2)
            WideCharToMultiByte CP_UTF8, 0&, StrPtr(str), Len(str), VarPtr(arr(3)), nOutputByteLen, 0&, 0&
            
            arr(0) = &HEF
            arr(1) = &HBB
            arr(2) = &HBF
            
            hFile = CreateFile(StrPtr(AppPath & "\имя файла.txt"), GENERIC_WRITE, FILE_SHARE_READ, ByVal 0&, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0)
            
            If hFile <> INVALID_HANDLE_VALUE Then
                WriteFile hFile, VarPtr(arr(0)), nOutputByteLen + 3, 0, ByVal 0&
                CloseHandle hFile
            End If
        End If
    End If
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
18.09.2023, 13:52
Цитата Сообщение от HackerVlad Посмотреть сообщение
кода кстати гораздо меньше:
Можно еще покороче, если разобраться

Visual Basic
1
2
3
4
5
6
7
    With S
        .Charset = "UTF-8"
        .Open
        .WriteText TextContent
        .SaveToFile FilePath, 2
        .Close
    End With
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
18.09.2023, 13:54  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
.SaveToFile FilePath, 2
а что такое 2?
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
18.09.2023, 14:16
Цитата Сообщение от HackerVlad Посмотреть сообщение
а что такое 2?
Флаг. Если подключишь Microsoft ActiveX Data Objects.. Будет доступна эта константа
Цитата Сообщение от testuser2 Посмотреть сообщение
adSaveCreateOverWrite
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
18.09.2023, 14:26  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
.SaveToFile FilePath, 2
а что такое 2?
Цитата Сообщение от testuser2 Посмотреть сообщение
Microsoft ActiveX Data Objects
Их там много, подключил наугад один и вроде да, всё нашёл.

Добавлено через 3 минуты
Остаётся только вопрос: на всех ли компьютерах есть ActiveX Data Objects чтобы так смело им пользоваться
0
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
18.09.2023, 14:57
ADODB это же библа для работы с базами данных. Вот, допустим, тема за 2005 год, по первой ссылке описание создания базы данных с помощью ado/dao (dao более раний вариант). Распространеная вещь.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
20.09.2023, 20:35  [ТС]
Я наконец-то изобрёл код для загрузки TXT файла в кодировке UTF8

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
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
Public 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
Public Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, ByVal lpBuffer As Long, ByVal nNumberOfBytesToWrite As Long, ByRef lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
 
Private Const OPEN_EXISTING As Long = 3
Private Const GENERIC_READ As Long = &H80000000
Private Const CP_UTF8 As Long = 65001
Public Const GENERIC_WRITE As Long = &H40000000
Public Const FILE_SHARE_READ = &H1
Public Const CREATE_ALWAYS = 2
Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
Public Const INVALID_HANDLE_VALUE As Long = -1
 
 
Dim hFile As Long
    Dim stringbuffer As String
    Dim stringbuffer2 As String
    Dim numread As Long
    Dim FileSize As Long
    Dim nOutputCharLen 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) ' Мгновенно выделить память для строки
            ReadFile hFile, StrPtr(stringbuffer), FileSize, numread, ByVal 0& ' Прочитать файл, ровно столько байтов, сколько нужно
            
            nOutputCharLen = MultiByteToWideChar(CP_UTF8, 0&, StrPtr(stringbuffer), FileSize, 0&, 0&)
            If nOutputCharLen > 0 Then
                PutMem4 VarPtr(stringbuffer2), SysAllocStringLen(0&, nOutputCharLen)
                MultiByteToWideChar CP_UTF8, 0&, StrPtr(stringbuffer), FileSize, StrPtr(stringbuffer2), nOutputCharLen ' Преобразовать кодировки
                
                ' stringbuffer2 содержит текст файла, его можно при желании преобразовать в массив через Split или QuickSplit
                
                If MidB$(stringbuffer, 1, 3) = ChrW(&HBBEF) & ChrB(&HBF) Then ' Если есть запись BOM
                    QuickSplit2 MidB$(stringbuffer2, 3), DataList, vbNewLine ' Быстро преобразовать строку в массив
                Else
                    QuickSplit2 stringbuffer2, DataList, vbNewLine
                End If
               
            End If
        End If
        
        CloseHandle hFile
    End If
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
20.09.2023, 21:03
HackerVlad, нужно проеверять возвращаемые значения, а вдруг ошибка?
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
20.09.2023, 21:59  [ТС]
The trick, мне тут не критично, в конечном итоге можно просто проверить пустая результатирующая строка или нет

Добавлено через 42 секунды
прям каждую-каждую API-функцию проверять не хочу

Добавлено через 51 секунду
плюс API в том, что программа не падает из-за ошибки, а продолжает дальше себе спокойненько работать :-)
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
20.09.2023, 21:59
Цитата Сообщение от HackerVlad Посмотреть сообщение
прям каждую-каждую API-функцию проверять не хочу
Ну это неверно. И правильнее сначала было бы считать BOM, а потом уже выделять память под строку уже с нужным размером.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
20.09.2023, 22:09  [ТС]
The trick, да может можно и улучшить/оптимизировать этот код, я лишь привёл пример рабочего куска кода, который я сегодня набросал для себя. Больше никто не привёл рабочий кусок кода.

Добавлено через 4 минуты
Может можно оптимизировать типа так:
Может проще указать будет StrPtr(stringbuffer) + 3 если есть запись BOM, чтобы потом строку не отрывать через MidB я не знаю тут подумать можно

Добавлено через 1 минуту
В любом случае конечно лучше сразу начинать с четвёртого байта...

Добавлено через 35 секунд
А два раза ReadFile не хочется как-то и позиционировать чтение типа сначала три байта а потом всё остальное...
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 12:42  [ТС]
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
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 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
Теперь сразу StrPtr(stringbuffer) + 3 как и обещал сделал
Цитата Сообщение от The trick Посмотреть сообщение
выделять память под строку уже с нужным размером.
Всё! Теперь выделяю память под строку с нужным размером сразу. Без всяких Mid потом

Добавлено через 10 минут
Так должно быть чуть быстрее теперь, по идее
2
1402 / 860 / 93
Регистрация: 08.02.2017
Сообщений: 3,671
Записей в блоге: 2
21.09.2023, 13:23
Цитата Сообщение от HackerVlad Посмотреть сообщение
PutMem4 VarPtr(stringbuffer), SysAllocStringByteLen(0&, FileSize)
Нативно это должно было бы выглядеть так
Visual Basic
1
stringbuffer = String(FileSize, vbNullString)
Но строка не работает, не хочет заполнять нулями.
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
21.09.2023, 17:07  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
stringbuffer = String(FileSize, vbNullString)
Этот код медленный, нулями или пробелами тут заполнять ничего не надо. Надо просто выделять память для строки поверх старых данных и всякого мусора, чтобы строка выделялась абсолютно мгновенно.

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

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
 
Private Sub Command1_Click()
    Dim tick As Long
    Dim str As String
    
    tick = GetTickCount
    
    str = String$(100000000, vbNullChar) ' Примерно 100 Мб строки данных
    
    Print GetTickCount - tick ' Примерно 125 млск на четырёхядерном мощном процессоре (на слабых машинах может быть куда больше млск)
End Sub
Добавлено через 4 минуты
testuser2, ты же сам можешь в этом убедиться ну:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Ptr As Long, ByVal Value As Long)
Private Declare Function SysAllocStringLen Lib "oleaut32" (ByVal olestr As Long, ByVal BLen As Long) As Long
 
' А теперь попробуем тоже самое с помощью API-функций
Private Sub Command2_Click()
    Dim tick As Long
    Dim str As String
    
    tick = GetTickCount
    
    PutMem4 VarPtr(str), SysAllocStringLen(0&, 100000000) ' Мгновенно выделить память для строки
    
    Print GetTickCount - tick ' 0 млск - абсолютно гновенно!
End Sub
Добавлено через 2 минуты
Если люди обычно во всех своих кодах пишут для выделения строки код типа:

Visual Basic
1
str = Space$(count)
это не значит что этот код быстрый, так и the trick часто пишет в своих кодах и я тоже, но это лишь от того что обычно не используем огромные строки. Если загружаем большой файл мегабайтов 50-100 то тогда уже использовать Space$ не имеет смысла. Медленно будет. Я думал ты это знаешь.

Добавлено через 5 минут
testuser2, сам убедись:

Visual Basic
1
2
3
4
5
6
7
8
Dim tick As Long
    Dim str As String
    
    tick = GetTickCount
    
    str = Space$(100000000) ' Примерно 200 Мб строки данных (по два байта на один символ)
    
    Print GetTickCount - tick ' Примерно 125 млск на четырёхядерном мощном процессоре (на слабых машинах может быть куда больше млск)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2023, 17:07

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
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