Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/74: Рейтинг темы: голосов - 74, средняя оценка - 4.95
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285

Перенос текста в формате Unicode из txt-файла в переменную

21.03.2012, 12:18. Показов 14834. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как поместить в переменную VBA текст в формате Unicode из текстового файла?
Конкретно, в моём случае - это нужно, чтобы осуществить поиск в Excel.
Т.е. нужно вот сюда подставить - What:="":
Visual Basic
1
2
3
    Cells.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate

Прилагаю пример txt-файла с символов, из-за которого и нужен Unicode (знак Сумма).
Вложения
Тип файла: txt Текстовый документ.txt (4 байт, 68 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2012, 12:18
Ответы с готовыми решениями:

Как сделать перенос из отдного txt файла текста в другой txt файл в Turbo C?
Надо сделать с потоками. fopen fgets fputs - с этими функциями

Cчитывание из файла текста в формате txt, и запись его в StringGrid
Доброе время суток!) С недавних пор начали писать программы в Lazarus.. За период обучения появились некоторые проблемы. Вообщем суть...

Чтение файла в Unicode формате
Как можно за одно обращение к потоку забрать не один байт, а сразу два? Необходимо считать все символы из текстового файла в UNICODE в...

36
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.03.2012, 12:26
Как вариант - открыть как txt-unicode, взять текст из первой ячейки, закрыть книгу.
1
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
21.03.2012, 12:32  [ТС]
Казанский,
с помощью Excel открыть?
0
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
21.03.2012, 12:49
Например так:
Visual Basic
1
2
3
4
5
6
7
8
    Dim Buffer As String
    Open "C:\Текстовый документ.txt" For Input As #1
    Line Input #1, Buffer
    Close #1
    Buffer = StrConv(Buffer, vbFromUnicode)
    Cells.Find(What:=Buffer, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.03.2012, 12:52
Ну да, запиши в макрос Ctrl+O, тип файлов: текстовые файлы - Открыть - формат файла: 65000 Юникод UTF-7 или 65001 Юникод UTF-8 и т.д.
Так в 2007.
1
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
21.03.2012, 13:01
Хотя бы скажите на каком строке ошибка. А то у меня нормально работает. Можеть быть вы не указали путь для Текстовый документ.txt
0
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
21.03.2012, 13:02  [ТС]
coderxx,
добавил ещё данных в текстовый файл, если сделать так:
Visual Basic
1
2
3
4
5
6
7
Sub Макрос1()
    Dim Buffer As String
    Open "C:\Documents and Settings\Пользователь\Рабочий стол\Debug.txt" For Input As #1
    Line Input #1, Buffer
    Close #1
    ActiveCell.Value = StrConv(Buffer, vbFromUnicode)
End Sub
то искажаются данные.
Вложения
Тип файла: txt Debug.txt (28 байт, 28 просмотров)
0
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
21.03.2012, 13:19
Посмотрел, искажаются.
Другой пример:
Visual Basic
1
2
3
4
5
6
    Dim FSO As Object
    Dim Buffer As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Buffer = FSO.OpenTextFile("C:\Debug.txt", 1, False, 0).ReadAll
    Set FSO = Nothing
    ActiveCell.Value = StrConv(Buffer, vbFromUnicode)
1
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
21.03.2012, 14:20  [ТС]
coderxx,
не понятно, что и как происходит, но работает.
0
 Аватар для KoGG
5646 / 1628 / 418
Регистрация: 23.12.2010
Сообщений: 2,450
Записей в блоге: 1
21.03.2012, 15:24
Лучший ответ Сообщение было отмечено как решение

Решение

Альтернативный вариант без FSO.
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Макрос1()
    Dim Buffer As String, Simv As String * 1
    Open "C:\Documents and Settings\Пользователь\Рабочий стол\Debug.txt" For Random As #1 Len = 1
    Do While Not EOF(1)
        Get #1, , Simv
        Buffer = Buffer & StrConv(Simv, vbFromUnicode)
    Loop
    Close #1
    ActiveCell.Value = Buffer
End Sub
2
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
21.03.2012, 15:49

Не по теме:

Жать "спасибо" теперь (с мартовского переворота*) как-то неловко — но руку жму!


vbFromUnicode — то слово!
______________________
* https://www.cyberforum.ru/abou... 19320.html
1
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
21.03.2012, 17:33  [ТС]
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
vbFromUnicode — то слово!
я честно говоря не понимаю смысла всего этого. Я вообще плохо представляю про кодировки, но как так получается, что символ находится в одной кодировке, мы его переводим в др. кодировку, которая имеет меньше возможностей, и всё получается. Как-то нелогично.

Я решил использовать способ Казанского - пусть Excel сам разбирается с кодировками.
0
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
21.03.2012, 17:41
Цитата Сообщение от Busine2012 Посмотреть сообщение
мы его переводим в др. кодировку, которая имеет меньше возможностей
Кто сказал что, у него меньше возможностей, возможности точно такое же, просто стандартная Open, Line input, Print, ... использует ANSI совместимые функции API, в то время не думали вообще про Unicode.
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
21.03.2012, 17:56
Цитата Сообщение от KoGG Посмотреть сообщение
Альтернативный вариант без FSO.
А чем плохо FSO? Лично мне FSO приятнее, чем Open ... For ... As
0
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
21.03.2012, 18:06  [ТС]
coderxx,
vbFromUnicode - это перевод текста из кодировки Unicode, а в какую кодировку?
0
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
21.03.2012, 18:28
vbFromUnicode=128 Преобразование строки из Unicode с помощью используемой по умолчанию системной кодовой страницы
из http://www.vbnet.ru/vbguide/showfunction.asp?id=34
Кодировки разные, их список можно посмотреть на браузере: Вид -> Кодировка -> ...
0
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
21.03.2012, 18:53  [ТС]
Цитата Сообщение от coderxx Посмотреть сообщение
vbFromUnicode=128 Преобразование строки из Unicode с помощью используемой по умолчанию системной кодовой страницы
а во что преобразуется то?


Цитата Сообщение от coderxx Посмотреть сообщение
Кодировки разные, их список можно посмотреть на браузере:
а при чём здесь браузер?
0
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
21.03.2012, 19:15
Цитата Сообщение от Busine2012 Посмотреть сообщение
а во что преобразуется то?
Текст преобразуется на текст, но с одной кодировки на другой.
Цитата Сообщение от Busine2012 Посмотреть сообщение
vbFromUnicode - это перевод текста из кодировки Unicode, а в какую кодировку?
Например на Windows-1251 (Кириллица)
Цитата Сообщение от Busine2012 Посмотреть сообщение
а при чём здесь браузер?
Там можеш посмотреть разные кодировки
1
1302 / 404 / 22
Регистрация: 21.10.2011
Сообщений: 1,285
21.03.2012, 19:18  [ТС]
Цитата Сообщение от coderxx Посмотреть сообщение
Например на Windows-1251 (Кириллица)
ясно, я думал, что в ANSI или ASCII.
0
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
21.03.2012, 19:21
Я прям не могу ссылку дать потому что это было на другом форуме:
Строки
Тут я описал три способа хранить строки(на самом деле способов можно придумать бесчисленное множество, но наиболее распространены как мне кажеться эти).
Итак, первый тип, BSTR(именно он использовуется в переменных типа String в VB6) - строка из unicode-символов, которая кончается двухбайтовым терминатором и перед которой стоит ее длина. Ввиду того, что сама строка содержит свою длину она может содержать произвольные символы.
Во второй тип, ABSTR, VB преобразует строки перед тем как передать их в API-функции. Этот тип отличается от BSTR тем, что содержит однобайтовые символы, вместо двухбайтовых.
Третий, LPSTR традиционно используется в C. Этот тип нигде не хранит длину строки, окончание строки определяется по нулевому терминатору в конце. Строка содержит однобайтовые символы. В отличие от первых двух типов, где нулевой терминатор стоит в конце лишь для совместимости со старыми типами, в LPSTR нулевой терминатор необходим, так как он указывает на конец строки. Так же нелишне отметить, что LPSTR строки по определению не могут содержать нулевых символов. Если вы поместите в LPSTR нулевой символ то для всех использующих ее функций строка "обрежется" до этого символа(по вполне очевидным причинам). Не менее важный минус LPSTR заключается в том, что время определения длины такой строки прямо пропорционально длине строки. Для очень длинных строк, порядка мегабайта, определение длины может оказаться весьма дорогой ситуацией. Типы (A)BSTR этого недостатка лишены.
Адреса
Напоследок раскажу об устройстве адреса в ОС windows. Вам ведь известно, что любую ячейку памяти процесса можно "обозвать" четырехбайтовым числом? Если известно, то увы вы малость заблуждаетесь.
На самом деле АП процесса содержит как минимум два сегмента - основной сегмент и вспомогательный.
Номер основного сегмента хранится в регистрах ds,cs,ss,es. gs не используется.
В fs хранится номер второго, служебного сегмента(который правда, является частью основного сегмента) и в этом сегменте храняться некоторые полезные данные о процессе, например его id.
Однако на практике этот сегмент используется только внутри ОС, так как его содержимое вообще говоря малокументировано.
А вот со вторым сегментом, номер которого всегда хранится в DS и ведет работа наша программа.
Если теперь принять утверждение о том, что написанная нами часть кода программы будет работать только с теми данными, что лежат в основном сегменте, то становится очевидным, почему так часто говорят что адрес в windows это только лишь четырех байтовое число.
Полное устройство адреса показано на рисунке, как видно он состоит из трех частей, номера сегмента, номера страницы и смещения внутри страницы.
Номер сегмента, как было сказано всегде лежит в ds и ss, так что про него можно "забыть" в большинстве случаев.
Номер страницы и смещение храняться внути 4-х байтового числа, void* в C++ или просто Long в VB. При этом под смещение страницы выделяется 12 бит а под номер - 20 бит. Если вам вдруг потребуется разрубить адрес на две части(я с трудом, правда, представляю, зачем вам это), то можно воспользоваться такой простой формулой:

Code
1
2
Offset=Address\&h1000
PageNumber=Address AND &hfffff000
Миниатюры
Перенос текста в формате Unicode из txt-файла в переменную  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2012, 19:21
Помогаю со студенческими работами здесь

Чтение из файла в формате Unicode
Прошу помощи, пытаюсь считать информацию из файла который в кодировке Unicode в ANSI все нормально работает #include...

Перенос матриц в текстовый файл с расширенеем txt в определенном формате
Здравствуйте, Я совсем недавно начала изучать Питон с целью облегчить себе жизнь на работе. Буду вам благодарна если вы мне поможите. ...

Считать строку из txt-файла Unicode и преобразовать ее в число - это реально?
Допустим у вас в txt-файле несколько чисел: 309 5 512 Если бы файл был в кодировке ANSI: 1) Вы считали строчку с помощью...

Перенос текста с поля в txt
Сразу прошу прощения за вопрос по PHP в C#, но так и не нашёл PHP форум. Нужна ваша помощь абсолютно тёмному человеку...:wall: Как...

Перенос текста из docx в txt
Всем здравствуйте, как перенести текст в расширений docx в текстовый файл(txt)? На примере если можно. Заранее благодарю.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru