Проблема с текстовыми DOS-файлами

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Divinich
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 19.02.2005 (Сб) 11:23

Проблема с текстовыми DOS-файлами

Сообщение Divinich » 28.03.2005 (Пн) 19:48

Проблема такова: есть файл созданный в DOS, в виндах он открывается разумеется белибердой, так вот, каким образом в VB можно поменять эту самую кодировку чтобы можно было нормально считать информацию. Я пробовал открывать через FileSystemObject так:
Код: Выделить всё
Private Sub Form_Load()
Dim fso, f, ts, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("C:\Documents and Settings\pki\Рабочий стол\Входные файлы\Reestr_05\02\Ver\02bp.002")
Set ts = f.OpenAsTextStream(ForReading, 0)
i = 1
Do While ts.AtEndOfStream <> True
   List1.AddItem ts.ReadLine
Loop
ts.Close
End Sub

И так:
Код: Выделить всё
Private Sub Form_Load()
Dim fso As FileSystemObject
Dim stream
Dim s As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set stream = fso.OpenTextFile("C:\Documents and Settings\pki\Рабочий стол\Входные  айлы\Reestr_05\02\Ver\02bp.001", ForReading, False, TristateUseDefault)
Do While stream.AtEndOfStream <> True
     List1.AddItem stream.ReadLine
Loop
stream.Close
End Sub


Меняя при этом последние параметры в OpenAsTextStream и OpenTextFile соответственно для обеих процедур, которые по идее и меняют кодировку данного текстового файла, но нормального эффекта это не приносит. Может я вообще, что не то делаю, или нужно какой-то другой тип использовать. Ну хоть каким-то образом можно поменять кодировку файла???

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.03.2005 (Пн) 19:56

Это тут не причем. Полученную строку преобразуй в другую кодовую страницу; в данном случае подойдет OemToAnsi.
Lasciate ogni speranza, voi ch'entrate.

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 29.03.2005 (Вт) 10:59

А можно расписать все кодировки в виде массивов. У меня на Си есть программа, 80% текста которой занимают 3 или 4 кодировки
На это не смотрите! Это не подпись!!!!!!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.03.2005 (Вт) 11:24

А можно все написать через 255 IF-ов.
Lasciate ogni speranza, voi ch'entrate.

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 29.03.2005 (Вт) 21:23

Еще лучше писать специальную программу для каждого символа
На это не смотрите! Это не подпись!!!!!!

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 29.03.2005 (Вт) 21:55

Код: Выделить всё

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function GetOEMCP Lib "kernel32" () As Long
Private Const LMEM_ZEROINIT As Long = &H40

private function Decode(byval InString as string) as string
   Dim hMemLock1   As Long
   Dim iStrSize    As Long
       hMemLock1 = LocalAlloc(LMEM_ZEROINIT, 255)
       iStrSize = MultiByteToWideChar(GetOEMCP, &H1, InString, -1, hMemLock1, 0&)
Call CopyMemory(ByVal Decode, ByVal hMemLock1, iStrSize)
end function

instring=strconv(Decode(StringToEncode),vbfromunicode)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 121

    TopList