Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2012, 01:17   #1
ymnuhj
Пользователь
 
Регистрация: 26.03.2012
Сообщений: 42
По умолчанию Чтение текста в Юникоде из 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 байт, 133 просмотров)
ymnuhj вне форума Ответить с цитированием
Старый 26.03.2012, 03:42   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

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

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

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

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

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

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


Чтоб все было кристально понятно прилагаю снимок. Там показан текстовый файл который был в юникоде, и экселевский файл с загруженным текстом. В ячейке А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



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

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

А если так?
Код:
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
По умолчанию

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

А вот так у меня работает:
Код:
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
По умолчанию

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

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

ОМГ...
Код:
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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение данных из 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 13:52