Добрый день! есть файл test_cod.003. Мне необходимо перекодировать его в Windows-1251. Использую следующую функцию, но нужный результат не получается:
Sub ПримерИспользования_ChangeTextCharset()
x = "d:\Andrew\*.003"
file = Dir(x)
Name = "d:\Andrew\" & file
' т.к Input из-за кодировки нерпаввильно считывает сточки, я пробую перекодировать файл в windows-1251 Open Name For InputAs #1 ' Open file for input. DoWhileNotEOF(1) ' Check for end of file. Line Input #1, InputData ' Read line of data. Debug.Print InputData ' Print to the Immediate window. Loop
ИсходнаяСтрока = Name ' вызываем функцию ChangeTextCharset с указанием кодировок
MsgBox "Результат перекодировки: """ & ПерекодированнаяСтрока & """", _
vbInformation, "Исходная строка: """ & ИсходнаяСтрока & """" Close #1 EndSub Function ChangeFileCharset(ByVal Filename$, ByVal DestCharset$, _ OptionalByVal SourceCharset$) AsBoolean ' функция перекодировки (смены кодировки) текстового файла ' В качестве параметров функция получает путь filename$ к текстовому файлу, ' и название кодировки DestCharset$ (в которую будет переведён файл) ' Функция возвращает TRUE, если перекодировка прошла успешно OnErrorResumeNext: Err.Clear WithCreateObject("ADODB.Stream")
.Type = 2 IfLen(SourceCharset$) Then .Charset = SourceCharset$ ' указываем исходную кодировку
.Open
.LoadFromFile Filename$ ' загружаем данные из файла
FileContent$ = .ReadText ' считываем текст файла в переменную FileContent$
.Close
.Charset = DestCharset$ ' назначаем новую кодировку
.Open
.WriteText FileContent$
.SaveToFile Filename$, 2' сохраняем файл уже в новой кодировке
.Close EndWith
ChangeFileCharset = Err = 0 EndFunction
Добрый день! есть файл test_cod.003. Мне необходимо перекодировать его в Windows-1251. Использую следующую функцию, но нужный результат не получается:
Sub ПримерИспользования_ChangeTextCharset()
x = "d:\Andrew\*.003"
file = Dir(x)
Name = "d:\Andrew\" & file
' т.к Input из-за кодировки нерпаввильно считывает сточки, я пробую перекодировать файл в windows-1251 Open Name For InputAs #1 ' Open file for input. DoWhileNotEOF(1) ' Check for end of file. Line Input #1, InputData ' Read line of data. Debug.Print InputData ' Print to the Immediate window. Loop
ИсходнаяСтрока = Name ' вызываем функцию ChangeTextCharset с указанием кодировок
MsgBox "Результат перекодировки: """ & ПерекодированнаяСтрока & """", _
vbInformation, "Исходная строка: """ & ИсходнаяСтрока & """" Close #1 EndSub Function ChangeFileCharset(ByVal Filename$, ByVal DestCharset$, _ OptionalByVal SourceCharset$) AsBoolean ' функция перекодировки (смены кодировки) текстового файла ' В качестве параметров функция получает путь filename$ к текстовому файлу, ' и название кодировки DestCharset$ (в которую будет переведён файл) ' Функция возвращает TRUE, если перекодировка прошла успешно OnErrorResumeNext: Err.Clear WithCreateObject("ADODB.Stream")
.Type = 2 IfLen(SourceCharset$) Then .Charset = SourceCharset$ ' указываем исходную кодировку
.Open
.LoadFromFile Filename$ ' загружаем данные из файла
FileContent$ = .ReadText ' считываем текст файла в переменную FileContent$
.Close
.Charset = DestCharset$ ' назначаем новую кодировку
.Open
.WriteText FileContent$
.SaveToFile Filename$, 2' сохраняем файл уже в новой кодировке
.Close EndWith
ChangeFileCharset = Err = 0 EndFunction
doober, доброго времени суток! Мне нужно построчно прочитать этот файл, записав строчки в переменные. Стандартным считыванием стоки используя Line Input #1, InputData не получается, т.к. в переменную записывается весть текст из файл (не сточка я весь файл). Я предположил, что это из-за кодировки. Начал искать варианты, но так и не нашел. Мне из исходного файла нужно получить, файл который я смогу считывать построчно. ! Когда я этот же файл в ручном режиме через Notepad++ перекодирую в "windows-1251", то Line Input #1, InputData срабатывает
doober, доброго времени суток! Мне нужно построчно прочитать этот файл, записав строчки в переменные. Стандартным считыванием стоки используя Line Input #1, InputData не получается, т.к. в переменную записывается весть текст из файл (не сточка я весь файл). Я предположил, что это из-за кодировки. Начал искать варианты, но так и не нашел. Мне из исходного файла нужно получить, файл который я смогу считывать построчно. ! Когда я этот же файл в ручном режиме через Notepad++ перекодирую в "windows-1251", то Line Input #1, InputData срабатываетanka2004
Sub test()
Путь_К_Файлу = "C:\Users\Сергей\Downloads\test_cod.003"
x = Read_Text(Путь_К_Файлу)
EndSub
Function Read_Text(Путь_К_Файлу) AsString() Dim oStream Dim S AsString Set oStream = CreateObject("ADODB.Stream")
oStream.Type = 2
oStream.Charset = "windows-1251"
oStream.Open
oStream.LoadFromFile Путь_К_Файлу
S = oStream.ReadText
oStream.Close
Read_Text = Split(S, Chr(10)) EndFunction
Sub test()
Путь_К_Файлу = "C:\Users\Сергей\Downloads\test_cod.003"
x = Read_Text(Путь_К_Файлу)
EndSub
Function Read_Text(Путь_К_Файлу) AsString() Dim oStream Dim S AsString Set oStream = CreateObject("ADODB.Stream")
oStream.Type = 2
oStream.Charset = "windows-1251"
oStream.Open
oStream.LoadFromFile Путь_К_Файлу
S = oStream.ReadText
oStream.Close
Read_Text = Split(S, Chr(10)) EndFunction
doober, из вашего примера попробовал вставить результат в ячейку листа. Первая сточка из текстового файла есть, а как вторую получить? запускать в цикл из массива?. Не понимаю, трудно. Очень мало работаю с макросами. Думал через конструкцию буду читать каждую сточку а уже из сточки брать любые символы какие мне нужны.
Open Name For InputAs #1 ' Open file for input. DoWhileNotEOF(1) ' Check for end of file. Line Input #1, InputData ' Read line of data. Debug.Print InputData ' Print to the Immediate window
--- но, т.к. в InputData считываются сразу две строки идет конец файл а все..... Если брать ваш пример, то не понимаю как обрабатывать вторую стоку
doober, из вашего примера попробовал вставить результат в ячейку листа. Первая сточка из текстового файла есть, а как вторую получить? запускать в цикл из массива?. Не понимаю, трудно. Очень мало работаю с макросами. Думал через конструкцию буду читать каждую сточку а уже из сточки брать любые символы какие мне нужны.
Open Name For InputAs #1 ' Open file for input. DoWhileNotEOF(1) ' Check for end of file. Line Input #1, InputData ' Read line of data. Debug.Print InputData ' Print to the Immediate window
--- но, т.к. в InputData считываются сразу две строки идет конец файл а все..... Если брать ваш пример, то не понимаю как обрабатывать вторую стокуanka2004
c=0 Open Name For InputAs #1 ' Open file for input. DoWhileNotEOF(1) ' Check for end of file.
c=c+1 Line Input #1, InputData ' Read line of data.
cells(c,1)= InputData Loop
c=0 Open Name For InputAs #1 ' Open file for input. DoWhileNotEOF(1) ' Check for end of file.
c=c+1 Line Input #1, InputData ' Read line of data.
cells(c,1)= InputData Loop
doober, данное решение не подходит, т.к. в одну ячейку записывает результат сразу двух строк. Если был получилось записать первую стоку в первую ячейку, вторую строку во вторую ячейку. Если использовать такую конструкцию, то вроде бы получается:
Sub text_str()
x = "d:\Andrew\*.003"
file = Dir(x)
Name = "d:\Andrew\" & file
Set fso = CreateObject("Scripting.FileSystemObject") Set file1 = fso.opentextfile(Name) DoUntil file1.AtEndOfStream
read_line = file1.readline If read_line <> ""Then 'For i = 1 To Len(read_line) ' Cells(j, i) = Mid(read_line, i, 1) 'Next i
Не понимаю, почему тогда у меня через Open Name For Input As #1 . Читает не строку а сразу весь файл и потом выходит из цикла....
doober, данное решение не подходит, т.к. в одну ячейку записывает результат сразу двух строк. Если был получилось записать первую стоку в первую ячейку, вторую строку во вторую ячейку. Если использовать такую конструкцию, то вроде бы получается:
Sub text_str()
x = "d:\Andrew\*.003"
file = Dir(x)
Name = "d:\Andrew\" & file
Set fso = CreateObject("Scripting.FileSystemObject") Set file1 = fso.opentextfile(Name) DoUntil file1.AtEndOfStream
read_line = file1.readline If read_line <> ""Then 'For i = 1 To Len(read_line) ' Cells(j, i) = Mid(read_line, i, 1) 'Next i
doober, Использую ваш код за исключением того, что удаляю строчу S$ = S$ & IIf(S$ = "", InputData, Chr(10) & InputData) - она по сути ни на что не влияет, т.к все равно необходимый мне файл не разбивает на отдельные строчки. Все же склоняюсь к тому, что имеет быть место именно кодировка файла, т.к. файл test.303 в win (видно на рисунке), а файл test_cod.003 который мне нужно прочитать построчно в другой кодировке (тоже видно из рисунка). Ваш код прочитал правильно и разбил на отдельные строчки только test.303
Line Input #1, InputData 'S$ = S$ & IIf(S$ = "", InputData, Chr(10) & InputData)
S$ = InputData
Cells(C, 1) = S$
C = C + 1 Loop Close #1
file = Dir Loop EndSub
Может есть еще какой то способ? А у вас эти два файла читает построчно?. Если так то может у меня в нехватает какой нибудь библиотеки которую нужно подключить. А если все же дело в кодировке, то амба!!! ничего не получается.
doober, Использую ваш код за исключением того, что удаляю строчу S$ = S$ & IIf(S$ = "", InputData, Chr(10) & InputData) - она по сути ни на что не влияет, т.к все равно необходимый мне файл не разбивает на отдельные строчки. Все же склоняюсь к тому, что имеет быть место именно кодировка файла, т.к. файл test.303 в win (видно на рисунке), а файл test_cod.003 который мне нужно прочитать построчно в другой кодировке (тоже видно из рисунка). Ваш код прочитал правильно и разбил на отдельные строчки только test.303
Line Input #1, InputData 'S$ = S$ & IIf(S$ = "", InputData, Chr(10) & InputData)
S$ = InputData
Cells(C, 1) = S$
C = C + 1 Loop Close #1
file = Dir Loop EndSub
Может есть еще какой то способ? А у вас эти два файла читает построчно?. Если так то может у меня в нехватает какой нибудь библиотеки которую нужно подключить. А если все же дело в кодировке, то амба!!! ничего не получается.anka2004
x$ = "d:\Andrew\"
file = Dir(x$ & "*.003")
C = 1 'C = 2 DoWhile file <> ""
Name$ = x$ & file
S$ = Read_Text(Name$)
Z = Split(S$, vbCrLf) IfUBound(Z) = 0Then
Z = Split(S$, vbCr) IfUBound(Z) = 0Then
Z = Split(S$, vbLf) EndIf EndIf For n = 0ToUBound(Z)
If Z(n) <> ""Then
Cells(C, 1) = Z(n)
C = C + 1
EndIf Next
file = Dir Loop EndSub
Function Read_Text(Путь_К_Файлу) AsString Dim oStream Dim S AsString Set oStream = CreateObject("ADODB.Stream")
oStream.Type = 2
oStream.Charset = "utf-8"
oStream.Open
oStream.LoadFromFile Путь_К_Файлу
Read_Text = oStream.ReadText
oStream.Close
EndFunction
Этот вариант открывает все правильно
Sub test()
x$ = "d:\Andrew\"
file = Dir(x$ & "*.003")
C = 1 'C = 2 DoWhile file <> ""
Name$ = x$ & file
S$ = Read_Text(Name$)
Z = Split(S$, vbCrLf) IfUBound(Z) = 0Then
Z = Split(S$, vbCr) IfUBound(Z) = 0Then
Z = Split(S$, vbLf) EndIf EndIf For n = 0ToUBound(Z)
If Z(n) <> ""Then
Cells(C, 1) = Z(n)
C = C + 1
EndIf Next
file = Dir Loop EndSub
Function Read_Text(Путь_К_Файлу) AsString Dim oStream Dim S AsString Set oStream = CreateObject("ADODB.Stream")
oStream.Type = 2
oStream.Charset = "utf-8"
oStream.Open
oStream.LoadFromFile Путь_К_Файлу
Read_Text = oStream.ReadText
oStream.Close
Вы думаете, что я сам знаю, как работает. Сделайте breakpoint в интересующих строках кода, в LocalsWindow смотрите, что происходит с переменными. Та и поймете, ничего сложного нет.
Вы думаете, что я сам знаю, как работает. Сделайте breakpoint в интересующих строках кода, в LocalsWindow смотрите, что происходит с переменными. Та и поймете, ничего сложного нет.doober