Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Microsoft Office и VBA > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 26.03.2012, 01:17   #1
ymnuhj
Пользователь
 
Регистрация: 26.03.2012
Сообщений: 42
Репутация: 10
По умолчанию Чтение текста в Юникоде из txt файла в столбец Excel 2010

В общем пытаюсь прочесть, но корректно (без кракозябр) получается только первая строка. Винда английская.

Sub ReadTextFile()
Dim Buffer
Dim FSO As FileSystemObject
Dim FSOFile As TextStream
Dim FilePath As String
r = 1

FilePath = "C:\text.txt"

Set FSO = New FileSystemObject
If FSO.FileExists(FilePath) Then
Set FSOFile = FSO.OpenTextFile(FilePath, 1, False)
Buffer = vbNullString
Do While Not FSOFile.AtEndOfStream
Buffer = FSOFile.ReadLine()
ThisWorkbook.Worksheets(1).Cells(r, 1).Value = StrConv(Buffer, vbFromUnicode)
r = r + 1
Loop
FSOFile.Close
Else
MsgBox (FilePath & " does not exist")
End If
End Sub


Прошу указать на мои ошибки или подсказать решение.
Спасибо
Вложения
Тип файла: txt text.txt (74 байт, 90 просмотров)
ymnuhj вне форума   Ответить с цитированием
Старый 26.03.2012, 03:42   #2
doober
Профессионал
 
Аватар для doober
 
Регистрация: 02.05.2009
Адрес: Леса Мордовии
Сообщений: 3,903
Репутация: 650

skype: d_ober1
По умолчанию

У вас файл в кодировке UTF-16 LE/UCS-2 Little Endian

Один из вариантов перекодировать
__________________
Анализ,обработка данных Недорого
doober вне форума   Ответить с цитированием
Старый 26.03.2012, 03:52   #3
ymnuhj
Пользователь
 
Регистрация: 26.03.2012
Сообщений: 42
Репутация: 10
По умолчанию

Как я понимаю Юникод имеет несколько разновидностей. Какую альтернативу стоит попробовать, и как перекодировать средствами VBA.?Либо записать в файл в другой разновидности Юникод?(Этот файл я записал из экселя)

Текст должен обязательно быть в юникоде для того чтобы рускоязычные буквы не превращялись в хлам на англоязычной винде
ymnuhj вне форума   Ответить с цитированием
Старый 26.03.2012, 05:46   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Адрес: Россия, Урал
Сообщений: 6,840
Репутация: 1286

skype: ExcelVBA.ru
По умолчанию

Функции перекодировки текстовых строк и текстовых файлов:
http://excelvba.ru/code/encode
EducatedFool вне форума   Ответить с цитированием
Старый 26.03.2012, 14:42   #5
ymnuhj
Пользователь
 
Регистрация: 26.03.2012
Сообщений: 42
Репутация: 10
По умолчанию

Но можно пойти другим путем. Если удалось прочесть весь текст из юникода в одну ячейку (и в одну переменную), то можно просто разбить ее на строки (которые изначально были в текстовом файле) и записать их все в колонку.
Либо может можно сразу закинуть эту переменную в колонку Эксель?
Вот тока как это сделать?


Чтоб все было кристально понятно прилагаю снимок. Там показан текстовый файл который был в юникоде, и экселевский файл с загруженным текстом. В ячейке А1 то что получилось, в колонке B то чего нужно добиться.

Вот текст VBA который использовался для считывания Юникода на английской винде.

Sub Макрос1()
Dim Buffer As String, Simv As String * 1
Open "C:\text.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


Текст в свою очередь был записан в файл с помощью кода на русской винде:
Sub SaveWorksheetAsUnicodeTxt()
thisworkbook.sheets(1).copy
activeworkbook.saveas "C:\text.txt", xlunicodeText
activeworkbook.close false
End Sub



Что посоветуете? Как заставить его создать колонку?

Заранее спасибо всем обитателям форума.
Изображения
 
Вложения
Тип файла: txt text.txt (52 байт, 93 просмотров)
ymnuhj вне форума   Ответить с цитированием
Старый 26.03.2012, 14:47   #6
DiemonStar
Профессионал
 
Регистрация: 08.02.2012
Адрес: Русь-матушка
Сообщений: 2,173
Репутация: 491
По умолчанию

А если так?
Код:
Sub Макрос1()
Dim Simv As String * 1
Open "C:\text.txt" For Random As #1 Len = 1
I = 1
Do While Not EOF(1)
Get #1, , Simv
Cells(I,1) = StrConv(Simv, vbFromUnicode)
I = I + 1
Loop
Close #1
End Sub
__________________
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума   Ответить с цитированием
Старый 26.03.2012, 15:29   #7
ymnuhj
Пользователь
 
Регистрация: 26.03.2012
Сообщений: 42
Репутация: 10
По умолчанию

неа, не пашет
Изображения
Тип файла: jpg Capture1.jpg (39.7 Кб, 89 просмотров)
ymnuhj вне форума   Ответить с цитированием
Старый 26.03.2012, 15:57   #8
DiemonStar
Профессионал
 
Регистрация: 08.02.2012
Адрес: Русь-матушка
Сообщений: 2,173
Репутация: 491
По умолчанию

А вот так у меня работает:
Код:
Sub Макрос1()
Dim Simv As String * 2
Open "C:\text.txt" For Random As #1 Len = 2
I = 1
Do While Not EOF(1)
Get #1, , Simv
Cells(I,1) = StrConv(Simv, vbFromUnicode)
I = I + 1
Loop
Close #1
End Sub
__________________
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума   Ответить с цитированием
Старый 26.03.2012, 18:28   #9
ymnuhj
Пользователь
 
Регистрация: 26.03.2012
Сообщений: 42
Репутация: 10
По умолчанию

Да, интересный трюк менять число во второй и третьей строке программы. Действительно записывает все в колонку, только теряет колличество ячеек. На прикрепленном снимке все видно

Только он из за этого не годится. Потому что текстовый файл это по сути Save. Я пытаюсь смоделировать ситуацию когда столбец сохраняется из руской винды(и оффиса), а потом загружается в такую же книгу на английском компе без потери информации.
Изображения
 
ymnuhj вне форума   Ответить с цитированием
Старый 26.03.2012, 19:10   #10
DiemonStar
Профессионал
 
Регистрация: 08.02.2012
Адрес: Русь-матушка
Сообщений: 2,173
Репутация: 491
По умолчанию

ОМГ...
Код:
Sub dd1()
Dim Simv As String * 2
Open "C:\text.txt" For Random As #1 Len = 2
I = 1
Do While Not EOF(1)
Get #1, , Simv
S = StrConv(Simv, vbFromUnicode)
If S = Chr(13) Then
  I = I + 1
  Get #1, , Simv
  Cells(I, 1) = ""
Else
  Cells(I, 1) = Cells(I, 1) + S
End If
Loop
Close #1
End Sub
__________________
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение данных из txt файла. werrey Общие вопросы Delphi 21 07.01.2012 11:56
Чтение данных из файла txt, язык C Sneeze Общие вопросы C/C++ 8 30.12.2011 14:34
if и чтение+вывод из файла .txt webber9989 PHP 4 24.08.2010 22:13
PL/SQL, построчное чтение txt файла seriousMalish SQL, базы данных 0 09.06.2010 21:31
Чтение из TXT файла soonner Общие вопросы Delphi 1 14.03.2009 14:52


14:09.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.