Работа с файлами в кодировке DOS.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Работа с файлами в кодировке DOS.

Сообщение oskolok_vatbI » 09.07.2007 (Пн) 16:50

Здравствуйте. Просветите пожалуйста по следующим вопросам:
Нужно производить однообразные замены символов в файлах одного типа записанных в кодировке DOS. При работе с цифрами и английскими буквами особых трудностей не возникло, а вот когда встретилась кирилица - начались некоторые проблеммы.
В интернете нашел немало практически одинаковых советов, как тут:
http://www.machineworld.hut2.ru/Program ... ntodos.htm
Сделал как велели, даже работает, только непонятно как. Объясните кому не лень:
Для чего объявляют третью функцию:
Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Declare Function OemToCharBuff Lib "user32" Alias "OemToCharBuffA" (ByVal lpszSrc As String, ByVal lpszDst As String, ByVal cchDstLength As Long) As Long


Что за переменная Buffer и что в нее записывается:
Public Function ToAnsi(S As String) As String
Dim Buffer As String
Buffer = String(Len(S), 32)
OemToCharBuff S, Buffer, Len(S)
ToAnsi = Trim(Buffer)
End Function


И наконец:
Private Sub File1_Click()
inq$ = Space(FileLen(File1.filename)) 'что происходит тут
Open File1.filename For Binary As #1
Get #1, 1, inq$
Close #1
outq$ = Space(Len(inq$)) ' и тут
OemToChar inq$, outq$
RichTextBox1.Text = outq$
End Sub


Заранее спасибо. К ответам вида "Задаешь такие вопросы - удали Basic" вполне готов :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 09.07.2007 (Пн) 17:43

Оскобок_ватбИ вместо того чтобы делать код синим, используй теги [сode]код код код[/сode] или [syntаx="vb"]код код код[/sуntax], чтобы получить соотв. результаты:

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

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


2)
Для чего объявляют третью функцию:

Чтобы потом зающать в ToAnsi

3)
Что за переменная Buffer и что в нее записывается:
Вообще окно Locals рулит. Название переменной Buffer говорит само за себя. Это буфер, в который будет помещена сконвертированная строка.


Перед вызовом функции строка должна иметь нужную длину. Это делают инструкцией:
Buffer = String(Len(S), 32)

После выполнение этой инструкции, переменной Buffer присвоится строка, состоящая из Len(S) пробелов. Len(S) возвращат длину строки S. Т.е. в переменной Buffer будет строка, состоящая из пробелов, число которых равно числу символов в строке S.

Далее, вызываем функцию OemToCharBuff, которая записывает в Buffer обработанную строку.

Далее с помощью функции Trim обрезаем лишние пробельные символы по краям строки (зачем это? этого тут не должно быть).


4)
Код: Выделить всё
inq$ = Space(FileLen(File1.filename)) 'что происходит тут


Аналогично. Переменной inq$ присваевается строка, состоящая из пробелов. Число этих пробелов равно кол-ву байтов в файле, выбранном с помощью FileListBox-а. таким образом, строка inq$ будет иметь размер равный размеру файла. Но будет состоять только из пробелов.

В первом случае вместо Space(...) использовалось String( ... , 32).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 09.07.2007 (Пн) 22:47

Уроки русского языка.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 98

    TopList