Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 17.03.2024
Сообщений: 33

Перенос строки

28.04.2024, 12:46. Показов 2669. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Простой вопрос.

Удалить все переносы строк в текстовом файле chr(10)+chr(13).

Replace(sLine, Chr(10) + Chr(13), "") - не срабатывает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2024, 12:46
Ответы с готовыми решениями:

Перенос строки
Приветствую. Допустим есть в проекте визуала длинная строчка, как ее записать в 2 строки?

Удалить перенос строки
ломаю голову второй день. в общем проблема такая: есть textbox1 с переносом строк - туда записываются 4 строчки текста, пример: ...

Как сделать перенос строки в Word 2007
подскажите пожалста!! в макросе прописываю перенось строки ls_text = ls_text & vbCr & "ну и тут что-то не важно" и в...

29
1 / 1 / 0
Регистрация: 17.03.2024
Сообщений: 33
06.12.2024, 01:30  [ТС]
Студворк — интернет-сервис помощи студентам
Добавлено через 50 минут
Цитата Сообщение от SergioJek Посмотреть сообщение
Below, если сортировать "Цифры", то всё отсортируется нормально.
Вы же сортируете числа как строки.
А "12"<"2". Вот неожиданность
Да, я понял как он сортирует, а как преобразовать к числовому формату - вот это прокатит: CLng(x)?

У меня там в тексте примерно такое 1a 4b 12с 7d 5f.

Добавлено через 15 минут
Цитата Сообщение от Catstail Посмотреть сообщение
Сообщение от Below
Replace(sLine, Chr(10) + Chr(13), "") - не срабатывает.
- естественно. Поскольку в реальности идет сначала 13, потом 10.
__________________
"Главное - в бой ввязаться. А там - посмотрим!" (Наполеон)

Да это мой косяк, чего-то совсем неотдуплил , все ж работает
0
1412 / 873 / 93
Регистрация: 08.02.2017
Сообщений: 3,724
Записей в блоге: 2
06.12.2024, 01:35
Цитата Сообщение от Below Посмотреть сообщение
У меня там в тексте примерно такое 1a 4b 12с 7d 5f.
Сортировать список файлов
1
1 / 1 / 0
Регистрация: 17.03.2024
Сообщений: 33
13.12.2024, 23:34  [ТС]
1. Ругается на объявление функции:
Visual Basic
1
Private Declare PtrSafe Function StrCmpLogicalW Lib "shlwapi.dll" (ByVal psz1 As LongPtr, ByVal psz2 As LongPtr) As Long
2. Там массив файлов, а мне нужно прочитать содержимое текстового файла. Т.е. считать его и передать в массив правильно. Сейчас пока только текст нормально сортирует, с цифрами проблема.

Да и 3-е., все это хотелось бы сделать под VB6.
0
Вернулся
 Аватар для HackerVlad
1777 / 672 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
14.12.2024, 03:54
Цитата Сообщение от Below Посмотреть сообщение
под VB6
Ну для VB6 надо удалить ключевое слово PtrSafe, а LongPtr поменять на Long
0
Вернулся
 Аватар для HackerVlad
1777 / 672 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
14.12.2024, 04:14
Цитата Сообщение от Below Посмотреть сообщение
прочитать содержимое текстового файла
Вот, я подготовил для вас пример, как прочитать содержимое текстового файла в кодировке UTF-8 (это оптимальная кодировка для файла), этот пример читает тестовый текстовый файл test.txt который лежит в папке примера.

Форма...
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
Option Explicit
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 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 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 CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Private Const FILE_SHARE_READ = &H1
Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
Private Const OPEN_EXISTING As Long = 3
Private Const GENERIC_READ As Long = &H80000000
Private Const INVALID_HANDLE_VALUE As Long = -1
Private Const CP_UTF8 As Long = 65001
 
Private Sub Form_Load()
    Dim LoadFilePath As String
    Dim hFile As Long
    Dim FileSize As Long
    Dim stringbuffer As String
    Dim stringbuffer2 As String
    Dim numread As Long
    Dim nOutputCharLen As Long
    Dim lpMultiByteStr As Long
    Dim arrTextFileStrings() As String
    Dim i As Long
    
    LoadFilePath = App.Path & "\test.txt"
    
    ' Загрузка списка
    hFile = CreateFile(StrPtr(LoadFilePath), 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
                    numread = numread - 3
                Else
                    lpMultiByteStr = StrPtr(stringbuffer)
                End If
                
                nOutputCharLen = MultiByteToWideChar(CP_UTF8, 0&, lpMultiByteStr, numread, 0&, 0&) ' Получить размер буфера в символах
                If nOutputCharLen > 0 Then
                    PutMem4 VarPtr(stringbuffer2), SysAllocStringLen(0&, nOutputCharLen)
                    
                    ' Преобразовать кодировки
                    If MultiByteToWideChar(CP_UTF8, 0&, lpMultiByteStr, numread, StrPtr(stringbuffer2), nOutputCharLen) > 0 Then
                        QuickSplit2 stringbuffer2, arrTextFileStrings, vbNewLine ' Быстро преобразовать строку в массив
                    End If
                End If
            End If
        End If
        
        CloseHandle hFile
        
        ' Пример чтения файла
        For i = 0 To UBound(arrTextFileStrings)
            If i < 50 Then ' Прочитать только первые 50 строк текстового файла, для примера отображения чисто
                Print arrTextFileStrings(i)
            End If
        Next
    End If
End Sub


Модуль...
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
Option Explicit
 
Private Declare Function SafeArrayRedim Lib "oleaut32" (ByVal saPtr As Long, saBound As Any) As Long
 
Public Sub QuickSplit2(Expression As String, ResultSplit() As String, Optional Delimiter As String = " ", Optional ByVal Limit As Long = -1)
    ' general variables that we need
    Dim i As Long, J As Long, K As Long, C As Long, LD As Long, LE As Long, Ptr As Long, R() As Long
    ' some dummy variables that we happen to need
    Dim Compare As VbCompareMethod
    ' length information
    LE = LenB(Expression)
    LD = LenB(Delimiter)
    ' figure output array safe array pointer
    Ptr = Not Not ResultSplit
    Debug.Assert App.hInstance
    ' validate lengths and limit (limit must be larger than 0 or it must be unlimited)
    If LE > 0 And LD > 0 And (Limit > 0 Or Limit = -1&) Then
        ' now look up for the first position
        i = InStrB(1, Expression, Delimiter)
        ' InStrB is very fast, but it may give "between characters" results
        Do Until (i And 1) Or (i = 0)
            ' this is why we look for odd positions (1, 3, 5, 7 etc. are a valid position)
            i = InStrB(i + 1, Expression, Delimiter)
        Loop
        ' unlimited or limited?
        If Limit = -1& Then
            ' unlimited, reserve space for maximum possible amount of returned items
            ReDim R(0 To LE \ LD)
            ' index positions until none is found
            Do While i > 0
                ' remember this position
                R(C) = i
                ' look for the next one
                i = InStrB(i + LD, Expression, Delimiter)
                Do Until (i And 1) Or (i = 0)
                    i = InStrB(i + 1, Expression, Delimiter)
                Loop
                ' increase found counter
                C = C + 1
            Loop
        Else
            ' limited, reserve space for the wanted amount of items
            ReDim R(0 To Limit - 1)
            ' index positions until none is found or until counter hits limitation
            Do While i > 0 And C < Limit
                ' remember this position
                R(C) = i
                ' look for the next one
                i = InStrB(i + LD, Expression, Delimiter)
                Do Until (i And 1) Or (i = 0)
                    i = InStrB(i + 1, Expression, Delimiter)
                Loop
                ' increase found counter
                C = C + 1
            Loop
        End If
        ' set results to actual findings
        If Ptr Then
            If UBound(ResultSplit) <> C Then ReDim Preserve ResultSplit(0 To C)
        Else
            ReDim ResultSplit(0 To C)
        End If
        ' see if we found any results
        If C = 0 Then
            ' nope, just set the only item to be the whole string
            If LenB(ResultSplit(0)) = LenB(Expression) Then
                MidB$(ResultSplit(0), 1, LenB(Expression)) = Expression
            Else
                ResultSplit(0) = Expression
            End If
        Else
            ' get the first item
            J = R(0) - 1
            K = LenB(ResultSplit(0)) - J
            If K Then
                ResultSplit(0) = LeftB$(Expression, R(0) - 1)
            ElseIf J Then
                MidB$(ResultSplit(0), 1, J) = LeftB$(Expression, J)
            End If
            i = R(0) + LD
            ' get the other items except the last one
            For C = 1 To C - 1
                J = R(C) - i
                K = LenB(ResultSplit(C)) - J
                If K Then
                    ResultSplit(C) = MidB$(Expression, i, J)
                ElseIf J Then
                    MidB$(ResultSplit(C), 1, J) = MidB$(Expression, i, J)
                End If
                i = R(C) + LD
            Next C
            ' get the last item
            ResultSplit(C) = RightB$(Expression, LE - i + 1)
        End If
        ' avoid the item removal code
        Ptr = 0
    ElseIf Ptr = 0 Then
        ' create array that we can reduce to nothing
        ReDim ResultSplit(0 To 0)
        Ptr = Not Not ResultSplit
        Debug.Assert App.hInstance
    End If
    ' custom redimension: remove the items (this duplicates the VB6 Split behavior)
    If Ptr Then SafeArrayRedim Ptr, 0@
End Sub
Миниатюры
Перенос строки  
Вложения
Тип файла: zip Прочитать содержимое текстового файла в кодировке UT.zip (66.3 Кб, 6 просмотров)
0
Вернулся
 Аватар для HackerVlad
1777 / 672 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
14.12.2024, 04:18
Пример сортировки массива без API:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Command1_Click()
    Dim myFiles As Object
    
    Set myFiles = CreateObject("System.Collections.ArrayList")
    
    myFiles.Add "яблоки"
    myFiles.Add "груши"
    myFiles.Add "дыни"
    myFiles.Add "арбузы"
    
    myFiles.Sort
    
    Me.Cls
    Print Join(myFiles.ToArray, vbCr)
End Sub
0
1412 / 873 / 93
Регистрация: 08.02.2017
Сообщений: 3,724
Записей в блоге: 2
14.12.2024, 10:36
Цитата Сообщение от Below Посмотреть сообщение
Там массив файлов, а мне нужно прочитать содержимое текстового файла. Т.е. считать его и передать в массив правильно.
Для этого ест функция Split
Цитата Сообщение от Below Посмотреть сообщение
Сейчас пока только текст нормально сортирует, с цифрами проблема.
Надо использовать
Цитата Сообщение от Below Посмотреть сообщение
StrCmpLogicalW
для сравнения в процедуре сортировки. Правда, эта функция сравнивает правильно только до первой попавшейся цифры в строке, вторую уже не правильно сравнивает. Но я в той теме выкладывал более универсальное решение с использованием RegExp, которое учитывает все цифры в строках.
Цитата Сообщение от Below Посмотреть сообщение
Да и 3-е., все это хотелось бы сделать под VB6.
Цитата Сообщение от HackerVlad Посмотреть сообщение
Ну для VB6 надо удалить ключевое слово PtrSafe, а LongPtr поменять на Long
Добавлено через 7 минут
Цитата Сообщение от Below Посмотреть сообщение
1a 4b 12с 7d 5f
Конкретно для такого случая вполне подходит апишный StrCmpLogicalW

Добавлено через 4 часа 59 минут
Цитата Сообщение от testuser2 Посмотреть сообщение
Правда, эта функция сравнивает правильно только до первой попавшейся цифрыцисла в строке, вторую уже не правильно сравнивает.
Сделал VB-аналог функции которая правильно сравнивает с любым количеством чисел в строке
0
Вернулся
 Аватар для HackerVlad
1777 / 672 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
14.12.2024, 13:56
Цитата Сообщение от testuser2 Посмотреть сообщение
Split
Split медленный. Я скинул ему QuickSplit так лучше будет.
0
1 / 1 / 0
Регистрация: 17.03.2024
Сообщений: 33
16.12.2024, 07:55  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
Ну для VB6 надо удалить ключевое слово PtrSafe, а LongPtr поменять на Long
В vba тоже только так работает.
1
jump
 Аватар для I can
5009 / 4816 / 852
Регистрация: 13.04.2015
Сообщений: 10,075
16.12.2024, 08:09
Цитата Сообщение от Below Посмотреть сообщение
В vba тоже только так работает.
Зависит от версии офиса

Добавлено через 2 минуты
и от версии операционной системы тоже.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.12.2024, 08:09

Как можно заменить перенос строки на определённый символ
Подскажите как можно заменить перенос строки на определённый символ.. Пример... в Text1.Text следующее: Нужно по нажатию на...

Автоматический перенос на 2 строки вниз в конце каждой строки документа
Доброго времени суток. Работаю с архивом фотографий, есть вакуумная директория с N-ым кол-вом файлов, имена которых я через командную...

Перенос строки в Combobox
Товарищи, здравствуйте. Прошу помочь, т.к. новичок в этом деле. В UserForm создал вот такой комбобокс: ComboBoxOOO.List =...

Перенос строки в дереве
Добрый день! На форме есть TreeView. В одной из веток содержится информация , которая не помещается в размер окна TreeView и увидеть...

Макрос эксель перенос строки
Приветстую. Пишу макрос - комментарий в верхнем колонтитуле. Комментарий должен быть в двух строках. Как в коде сделать перенос? Нажимая...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru