Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Записывание русского текста в файл, Put #1, , "Привет, Vingrad'овцы!" 
:(
    Опции темы
cardinal
Дата 29.8.2004, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Всем, привет!
Я в принципе создал этот топик, чтобы посоветоваться smile.gif
Есть такой код:
Код
Private Sub Command1_Click()
Open "e:\test.txt" For Binary Access Write As #1
Put #1, , "Привет, Vingrad'овцы!"
Close #1
End Sub

Вы пробовали когда-нибудь такое сделать?
Дело в том, что в файле будет потом записано следующее (cм. картинку).
Я тут просто что-то подумал, что проблема не велика и в принципе уже ее решил, но вот хотел вас спросить как бы вы боролись с такой трабл smile.gif.
Напишите плиз просто ход ваших мыслей, а может уже вообще видели как эту проблему кто-нибудь решил. Просто интересно.
Только не надо пока ничего программировать, а то получится, что сделаете тоже самое, что я уже сделал smile.gif.
Мы пока просто посоветуемся, а потом я вывалю то, что сделал (если не пойму по ходу дискуссии, что сделал что-то не то smile.gif).

Вобщем тема для обсуждения того, как бы вы начали решать (или уже когда-то решили) эту проблему.
Всем спасибо! thumbs-up.gif

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  put.jpg


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
boevik
Дата 29.8.2004, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



cardinal, какой язык в системе определен для non-unicode programs?

P.S. у меня всё ОК.



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
bom
Дата 29.8.2004, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

Репутация: 4
Всего: 6



Наверное дело в свойствах двоичного файла, он не понимает русские символы и нужно явно указывать их коды, у меня была похожая задача, решил ее примерно так:
Код
Private Sub Command1_Click()
printrustext "Привет, Vingrad'овцы!", "e:\test.txt"
End Sub
Function printrustext(rustext As String, mpath As String)
Dim i As Integer
Open mpath For Binary Access Write As #1
For i = 1 To Len(rustext)
Put #1, i, Asc(Mid(rustext, i, 1))
Next i
Close #1
End Function

Сорру если повторил твое решение inlove.gif
PM MAIL   Вверх
cardinal
Дата 29.8.2004, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(boevik @ 29.8.2004, 08:33)
cardinal, какой язык в системе определен для non-unicode programs?

А где это устанавливается? У меня win98...
Цитата(bom @ 29.8.2004, 08:37)
Сорру если повторил твое решение

Ну... похоже на мое smile.gif
Попозже выложу...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
boevik
Дата 29.8.2004, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Я делал тест на Windows 2K.
И как я уже писал, такой проблемы не возникло.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
cardinal
Дата 29.8.2004, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(boevik @ 29.8.2004, 13:39)
Я делал тест на Windows 2K.

Понял. Не исключаю, что на Windows 2K такой проблемы вообще не появляется.

Ладно вот как я сделал:
Код
Private Sub Command1_Click()
Open "e:\test.txt" For Binary Access Write As #1
PutR 1, 0, "Привет, Vingrad'овцы!"
Close #1
End Sub

В модуль:
Код
Option Explicit

Private InitStatus As Boolean
Private CodeTab(255) As Byte

Public Function PutRInit()
CodeTab(0) = &H0: CodeTab(1) = &H0: CodeTab(2) = &H0: CodeTab(3) = &H0: CodeTab(4) = &H0
CodeTab(5) = &H0: CodeTab(6) = &H0: CodeTab(7) = &H0: CodeTab(8) = &H0: CodeTab(9) = &H0
CodeTab(10) = &H0: CodeTab(11) = &H0: CodeTab(12) = &H0: CodeTab(13) = &H0: CodeTab(14) = &H0
CodeTab(15) = &H0: CodeTab(16) = &H0: CodeTab(17) = &H0: CodeTab(18) = &H0: CodeTab(19) = &H0
CodeTab(20) = &H0: CodeTab(21) = &H0: CodeTab(22) = &H0: CodeTab(23) = &H0: CodeTab(24) = &H0
CodeTab(25) = &H0: CodeTab(26) = &H0: CodeTab(27) = &H0: CodeTab(28) = &H0: CodeTab(29) = &H0
CodeTab(30) = &H0: CodeTab(31) = &H0
CodeTab(32) = &H20: CodeTab(33) = &H21 ' !
CodeTab(34) = &H22 ' "
CodeTab(35) = &H23 ' #
CodeTab(36) = &H24 ' $
CodeTab(37) = &H25 ' %
CodeTab(38) = &H26 ' &
CodeTab(39) = &H27 ' '
CodeTab(40) = &H28 ' (
CodeTab(41) = &H29 ' )
CodeTab(42) = &H2A ' *
CodeTab(43) = &H2B ' +
CodeTab(44) = &H2C ' ,
CodeTab(45) = &H2D ' -
CodeTab(46) = &H2E ' .
CodeTab(47) = &H2F ' /
CodeTab(48) = &H30 ' 0
CodeTab(49) = &H31 ' 1
CodeTab(50) = &H32 ' 2
CodeTab(51) = &H33 ' 3
CodeTab(52) = &H34 ' 4
CodeTab(53) = &H35 ' 5
CodeTab(54) = &H36 ' 6
CodeTab(55) = &H37 ' 7
CodeTab(56) = &H38 ' 8
CodeTab(57) = &H39 ' 9
CodeTab(58) = &H3A ' :
CodeTab(59) = &H3B ';
CodeTab(60) = &H3C ' <
CodeTab(61) = &H3D ' =
CodeTab(62) = &H3E ' >
CodeTab(63) = &H3F ' ?
CodeTab(64) = &H40 ' @
CodeTab(65) = &H41 ' A
CodeTab(66) = &H42 ' B
CodeTab(67) = &H43 ' C
CodeTab(68) = &H44 ' D
CodeTab(69) = &H45 ' E
CodeTab(70) = &H46 ' F
CodeTab(71) = &H47 ' G
CodeTab(72) = &H48 ' H
CodeTab(73) = &H49 ' I
CodeTab(74) = &H4A ' J
CodeTab(75) = &H4B ' K
CodeTab(76) = &H4C ' L
CodeTab(77) = &H4D ' M
CodeTab(78) = &H4E ' N
CodeTab(79) = &H4F ' O
CodeTab(80) = &H50 ' P
CodeTab(81) = &H51 ' Q
CodeTab(82) = &H52 ' R
CodeTab(83) = &H53 ' S
CodeTab(84) = &H54 ' T
CodeTab(85) = &H55 ' U
CodeTab(86) = &H56 ' V
CodeTab(87) = &H57 ' W
CodeTab(88) = &H58 ' X
CodeTab(89) = &H59 ' Y
CodeTab(90) = &H5A ' Z
CodeTab(91) = &H5B ' [
CodeTab(92) = &H5C ' \
CodeTab(93) = &H5D ' ]
CodeTab(94) = &H5E ' ^
CodeTab(95) = &H5F ' _ '
CodeTab(96) = &H60 ' `
CodeTab(97) = &H61 ' a
CodeTab(98) = &H62 ' b
CodeTab(99) = &H63 ' c
CodeTab(100) = &H64 ' d
CodeTab(101) = &H65 ' e
CodeTab(102) = &H66 ' f
CodeTab(103) = &H67 ' g
CodeTab(104) = &H68 ' h
CodeTab(105) = &H69 ' i
CodeTab(106) = &H6A ' j
CodeTab(107) = &H6B ' k
CodeTab(108) = &H6C ' l
CodeTab(109) = &H6D ' m
CodeTab(110) = &H6E ' n
CodeTab(111) = &H6F ' o
CodeTab(112) = &H70 ' p
CodeTab(113) = &H71 ' q
CodeTab(114) = &H72 ' r
CodeTab(115) = &H73 ' s
CodeTab(116) = &H74 ' t
CodeTab(117) = &H75 ' u
CodeTab(118) = &H76 ' v
CodeTab(119) = &H77 ' w
CodeTab(120) = &H78 ' x
CodeTab(121) = &H79 ' y
CodeTab(122) = &H7A ' z
CodeTab(123) = &H7B ' {
CodeTab(124) = &H7C ' |
CodeTab(125) = &H7D ' }
CodeTab(126) = &H7E ' ~
CodeTab(127) = &H0: CodeTab(128) = &H0: CodeTab(129) = &H0: CodeTab(130) = &H0: CodeTab(131) = &H0
CodeTab(132) = &H0: CodeTab(133) = &H0: CodeTab(134) = &H0: CodeTab(135) = &H0: CodeTab(136) = &H0
CodeTab(137) = &H0: CodeTab(138) = &H0: CodeTab(139) = &H0: CodeTab(140) = &H0: CodeTab(141) = &H0
CodeTab(142) = &H0: CodeTab(143) = &H0: CodeTab(144) = &H0: CodeTab(145) = &H0: CodeTab(146) = &H0
CodeTab(147) = &H0: CodeTab(148) = &H0: CodeTab(149) = &H0: CodeTab(150) = &H0: CodeTab(151) = &H0
CodeTab(152) = &H0: CodeTab(153) = &H0: CodeTab(154) = &H0: CodeTab(155) = &H0: CodeTab(156) = &H0
CodeTab(157) = &H0: CodeTab(158) = &H0: CodeTab(159) = &H0: CodeTab(160) = &H0: CodeTab(161) = &H0
CodeTab(162) = &H0: CodeTab(163) = &H0: CodeTab(164) = &H0: CodeTab(165) = &H0: CodeTab(166) = &H0
CodeTab(167) = &H0
CodeTab(168) = &HF0 ' Ё
CodeTab(169) = &H0: CodeTab(170) = &H0: CodeTab(171) = &H0: CodeTab(172) = &H0: CodeTab(173) = &H0
CodeTab(174) = &H0: CodeTab(175) = &H0: CodeTab(176) = &H0: CodeTab(177) = &H0: CodeTab(178) = &H0
CodeTab(179) = &H0: CodeTab(180) = &H0: CodeTab(181) = &H0: CodeTab(182) = &H0: CodeTab(183) = &H0
CodeTab(184) = &HF1 ' ё
CodeTab(185) = &H0: CodeTab(186) = &H0: CodeTab(187) = &H0: CodeTab(188) = &H0: CodeTab(189) = &H0
CodeTab(190) = &H0: CodeTab(191) = &H0
CodeTab(192) = &H80 ' А
CodeTab(193) = &H81 ' Б
CodeTab(194) = &H82 ' В
CodeTab(195) = &H83 ' Г
CodeTab(196) = &H84 ' Д
CodeTab(197) = &H85 ' Е
CodeTab(198) = &H86 ' Ж
CodeTab(199) = &H87 ' З
CodeTab(200) = &H88 ' И
CodeTab(201) = &H89 ' Й
CodeTab(202) = &H8A ' К
CodeTab(203) = &H8B ' Л
CodeTab(204) = &H8C ' М
CodeTab(205) = &H8D ' Н
CodeTab(206) = &H8E ' О
CodeTab(207) = &H8F ' П
CodeTab(208) = &H90 ' Р
CodeTab(209) = &H91 ' С
CodeTab(210) = &H92 ' Т
CodeTab(211) = &H93 ' У
CodeTab(212) = &H94 ' Ф
CodeTab(213) = &H95 ' Х
CodeTab(214) = &H96 ' Ц
CodeTab(215) = &H97 ' Ч
CodeTab(216) = &H98 ' Ш
CodeTab(217) = &H99 ' Щ
CodeTab(218) = &H9A ' Ь
CodeTab(219) = &H9B ' Ы
CodeTab(220) = &H9C ' Ъ
CodeTab(221) = &H9D ' Э
CodeTab(222) = &H9E ' Ю
CodeTab(223) = &H9F ' Я
CodeTab(224) = &HA0 ' а
CodeTab(225) = &HA1 ' б
CodeTab(226) = &HA2 ' в
CodeTab(227) = &HA3 ' г
CodeTab(228) = &HA4 ' д
CodeTab(229) = &HA5 ' е
CodeTab(230) = &HA6 ' ж
CodeTab(231) = &HA7 ' з
CodeTab(232) = &HA8 ' и
CodeTab(233) = &HA9 ' й
CodeTab(234) = &HAA ' к
CodeTab(235) = &HAB ' л
CodeTab(236) = &HAC ' м
CodeTab(237) = &HAD ' н
CodeTab(238) = &HAE ' о
CodeTab(239) = &HAF ' п
CodeTab(240) = &HE0 ' р
CodeTab(241) = &HE1 ' с
CodeTab(242) = &HE2 ' т
CodeTab(243) = &HE3 ' у
CodeTab(244) = &HE4 ' ф
CodeTab(245) = &HE5 ' х
CodeTab(246) = &HE6 ' ц
CodeTab(247) = &HE7 ' ч
CodeTab(248) = &HE8 ' ш
CodeTab(249) = &HE9 ' щ
CodeTab(250) = &HEA ' ъ
CodeTab(251) = &HEB ' ы
CodeTab(252) = &HEC ' ь
CodeTab(253) = &HED ' э
CodeTab(254) = &HEE ' ю
CodeTab(255) = &HEF ' я
InitStatus = True
End Function

Public Function PutR(FileNumber As Integer, Position As Double, Text As String)
Dim i As Integer
If InitStatus = False Then PutRInit
If Position = 0 Then
   If Text = "" Then
        Put #FileNumber, , CByte(&HD)
        Put #FileNumber, , CByte(&HA)
   Else
       For i = 0 To Len(Text) - 1
           Put #FileNumber, , CodeTab(Asc(Left(Text, 1)))
           Text = Right(Text, Len(Text) - 1)
       Next
   End If
Else
   If Text = "" Then
        Put #FileNumber, Position, CByte(&HD)
        Put #FileNumber, Position, CByte(&HA)
   Else
       For i = 0 To Len(Text)
           Put #FileNumber, Position, CodeTab(Asc(Left(Text, 1)))
           Text = Right(Text, Len(Text) - 1)
       Next
   End If
End If
End Function

p.s.
если написать
Код
PutR 1, 0, ""

то в файл запишется 0x0d, 0x0a.
Если написать Position, то вроде все должно тоже функционировать. Мне сейчас уже просто некогда проверять. Если есть предложения как улучшить, то давайте, а потом засуну в FAQ.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
bom
Дата 29.8.2004, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

Репутация: 4
Всего: 6



cardinal , не понятно, зачем переводить всю кодовую таблицу в двоичные значения, а не использовать десятичные как в моем примере?
Ну ладно, если очень хочется, то можно smile.gif
Есть предложение по улучшению этого варианта:
Код
Private Sub Command1_Click()
Open "e:\test.txt" For Binary Access Write As #1
PutR 1, "Привет, Vingrad'овцы!"
Close #1
End Sub

В модуль:
Код
Private CodeTab(255) As Byte

Private Function PutRInit()
CodeTab(0) = &H0: CodeTab(1) = &H0: CodeTab(2) = &H0: CodeTab(3) = &H0: CodeTab(4) = &H0
CodeTab(5) = &H0: CodeTab(6) = &H0: CodeTab(7) = &H0: CodeTab(8) = &H0: CodeTab(9) = &H0
CodeTab(10) = &H0: CodeTab(11) = &H0: CodeTab(12) = &H0: CodeTab(13) = &H0: CodeTab(14) = &H0
CodeTab(15) = &H0: CodeTab(16) = &H0: CodeTab(17) = &H0: CodeTab(18) = &H0: CodeTab(19) = &H0
CodeTab(20) = &H0: CodeTab(21) = &H0: CodeTab(22) = &H0: CodeTab(23) = &H0: CodeTab(24) = &H0
CodeTab(25) = &H0: CodeTab(26) = &H0: CodeTab(27) = &H0: CodeTab(28) = &H0: CodeTab(29) = &H0
CodeTab(30) = &H0: CodeTab(31) = &H0
CodeTab(32) = &H20: CodeTab(33) = &H21 ' !
CodeTab(34) = &H22 ' "
CodeTab(35) = &H23 ' #
CodeTab(36) = &H24 ' $
CodeTab(37) = &H25 ' %
CodeTab(38) = &H26 ' &
CodeTab(39) = &H27 ' '
CodeTab(40) = &H28 ' (
CodeTab(41) = &H29 ' )
CodeTab(42) = &H2A ' *
CodeTab(43) = &H2B ' +
CodeTab(44) = &H2C ' ,
CodeTab(45) = &H2D ' -
CodeTab(46) = &H2E ' .
CodeTab(47) = &H2F ' /
CodeTab(48) = &H30 ' 0
CodeTab(49) = &H31 ' 1
CodeTab(50) = &H32 ' 2
CodeTab(51) = &H33 ' 3
CodeTab(52) = &H34 ' 4
CodeTab(53) = &H35 ' 5
CodeTab(54) = &H36 ' 6
CodeTab(55) = &H37 ' 7
CodeTab(56) = &H38 ' 8
CodeTab(57) = &H39 ' 9
CodeTab(58) = &H3A ' :
CodeTab(59) = &H3B ';
CodeTab(60) = &H3C ' <
CodeTab(61) = &H3D ' =
CodeTab(62) = &H3E ' >
CodeTab(63) = &H3F ' ?
CodeTab(64) = &H40 ' @
CodeTab(65) = &H41 ' A
CodeTab(66) = &H42 ' B
CodeTab(67) = &H43 ' C
CodeTab(68) = &H44 ' D
CodeTab(69) = &H45 ' E
CodeTab(70) = &H46 ' F
CodeTab(71) = &H47 ' G
CodeTab(72) = &H48 ' H
CodeTab(73) = &H49 ' I
CodeTab(74) = &H4A ' J
CodeTab(75) = &H4B ' K
CodeTab(76) = &H4C ' L
CodeTab(77) = &H4D ' M
CodeTab(78) = &H4E ' N
CodeTab(79) = &H4F ' O
CodeTab(80) = &H50 ' P
CodeTab(81) = &H51 ' Q
CodeTab(82) = &H52 ' R
CodeTab(83) = &H53 ' S
CodeTab(84) = &H54 ' T
CodeTab(85) = &H55 ' U
CodeTab(86) = &H56 ' V
CodeTab(87) = &H57 ' W
CodeTab(88) = &H58 ' X
CodeTab(89) = &H59 ' Y
CodeTab(90) = &H5A ' Z
CodeTab(91) = &H5B ' [
CodeTab(92) = &H5C ' \
CodeTab(93) = &H5D ' ]
CodeTab(94) = &H5E ' ^
CodeTab(95) = &H5F ' _ '
CodeTab(96) = &H60 ' `
CodeTab(97) = &H61 ' a
CodeTab(98) = &H62 ' b
CodeTab(99) = &H63 ' c
CodeTab(100) = &H64 ' d
CodeTab(101) = &H65 ' e
CodeTab(102) = &H66 ' f
CodeTab(103) = &H67 ' g
CodeTab(104) = &H68 ' h
CodeTab(105) = &H69 ' i
CodeTab(106) = &H6A ' j
CodeTab(107) = &H6B ' k
CodeTab(108) = &H6C ' l
CodeTab(109) = &H6D ' m
CodeTab(110) = &H6E ' n
CodeTab(111) = &H6F ' o
CodeTab(112) = &H70 ' p
CodeTab(113) = &H71 ' q
CodeTab(114) = &H72 ' r
CodeTab(115) = &H73 ' s
CodeTab(116) = &H74 ' t
CodeTab(117) = &H75 ' u
CodeTab(118) = &H76 ' v
CodeTab(119) = &H77 ' w
CodeTab(120) = &H78 ' x
CodeTab(121) = &H79 ' y
CodeTab(122) = &H7A ' z
CodeTab(123) = &H7B ' {
CodeTab(124) = &H7C ' |
CodeTab(125) = &H7D ' }
CodeTab(126) = &H7E ' ~
CodeTab(127) = &H0: CodeTab(128) = &H0: CodeTab(129) = &H0: CodeTab(130) = &H0: CodeTab(131) = &H0
CodeTab(132) = &H0: CodeTab(133) = &H0: CodeTab(134) = &H0: CodeTab(135) = &H0: CodeTab(136) = &H0
CodeTab(137) = &H0: CodeTab(138) = &H0: CodeTab(139) = &H0: CodeTab(140) = &H0: CodeTab(141) = &H0
CodeTab(142) = &H0: CodeTab(143) = &H0: CodeTab(144) = &H0: CodeTab(145) = &H0: CodeTab(146) = &H0
CodeTab(147) = &H0: CodeTab(148) = &H0: CodeTab(149) = &H0: CodeTab(150) = &H0: CodeTab(151) = &H0
CodeTab(152) = &H0: CodeTab(153) = &H0: CodeTab(154) = &H0: CodeTab(155) = &H0: CodeTab(156) = &H0
CodeTab(157) = &H0: CodeTab(158) = &H0: CodeTab(159) = &H0: CodeTab(160) = &H0: CodeTab(161) = &H0
CodeTab(162) = &H0: CodeTab(163) = &H0: CodeTab(164) = &H0: CodeTab(165) = &H0: CodeTab(166) = &H0
CodeTab(167) = &H0
CodeTab(168) = &HF0 ' Ё
CodeTab(169) = &H0: CodeTab(170) = &H0: CodeTab(171) = &H0: CodeTab(172) = &H0: CodeTab(173) = &H0
CodeTab(174) = &H0: CodeTab(175) = &H0: CodeTab(176) = &H0: CodeTab(177) = &H0: CodeTab(178) = &H0
CodeTab(179) = &H0: CodeTab(180) = &H0: CodeTab(181) = &H0: CodeTab(182) = &H0: CodeTab(183) = &H0
CodeTab(184) = &HF1 ' ё
CodeTab(185) = &H0: CodeTab(186) = &H0: CodeTab(187) = &H0: CodeTab(188) = &H0: CodeTab(189) = &H0
CodeTab(190) = &H0: CodeTab(191) = &H0
CodeTab(192) = &H80 ' А
CodeTab(193) = &H81 ' Б
CodeTab(194) = &H82 ' В
CodeTab(195) = &H83 ' Г
CodeTab(196) = &H84 ' Д
CodeTab(197) = &H85 ' Е
CodeTab(198) = &H86 ' Ж
CodeTab(199) = &H87 ' З
CodeTab(200) = &H88 ' И
CodeTab(201) = &H89 ' Й
CodeTab(202) = &H8A ' К
CodeTab(203) = &H8B ' Л
CodeTab(204) = &H8C ' М
CodeTab(205) = &H8D ' Н
CodeTab(206) = &H8E ' О
CodeTab(207) = &H8F ' П
CodeTab(208) = &H90 ' Р
CodeTab(209) = &H91 ' С
CodeTab(210) = &H92 ' Т
CodeTab(211) = &H93 ' У
CodeTab(212) = &H94 ' Ф
CodeTab(213) = &H95 ' Х
CodeTab(214) = &H96 ' Ц
CodeTab(215) = &H97 ' Ч
CodeTab(216) = &H98 ' Ш
CodeTab(217) = &H99 ' Щ
CodeTab(218) = &H9A ' Ь
CodeTab(219) = &H9B ' Ы
CodeTab(220) = &H9C ' Ъ
CodeTab(221) = &H9D ' Э
CodeTab(222) = &H9E ' Ю
CodeTab(223) = &H9F ' Я
CodeTab(224) = &HA0 ' а
CodeTab(225) = &HA1 ' б
CodeTab(226) = &HA2 ' в
CodeTab(227) = &HA3 ' г
CodeTab(228) = &HA4 ' д
CodeTab(229) = &HA5 ' е
CodeTab(230) = &HA6 ' ж
CodeTab(231) = &HA7 ' з
CodeTab(232) = &HA8 ' и
CodeTab(233) = &HA9 ' й
CodeTab(234) = &HAA ' к
CodeTab(235) = &HAB ' л
CodeTab(236) = &HAC ' м
CodeTab(237) = &HAD ' н
CodeTab(238) = &HAE ' о
CodeTab(239) = &HAF ' п
CodeTab(240) = &HE0 ' р
CodeTab(241) = &HE1 ' с
CodeTab(242) = &HE2 ' т
CodeTab(243) = &HE3 ' у
CodeTab(244) = &HE4 ' ф
CodeTab(245) = &HE5 ' х
CodeTab(246) = &HE6 ' ц
CodeTab(247) = &HE7 ' ч
CodeTab(248) = &HE8 ' ш
CodeTab(249) = &HE9 ' щ
CodeTab(250) = &HEA ' ъ
CodeTab(251) = &HEB ' ы
CodeTab(252) = &HEC ' ь
CodeTab(253) = &HED ' э
CodeTab(254) = &HEE ' ю
CodeTab(255) = &HEF ' я
End Function

Public Function PutR(FileNumber As Integer, Text As String)
Dim i As Integer
PutRInit
      For i = 1 To Len(Text)
          Put #FileNumber, i, CodeTab(Asc(Mid(Text, i, 1)))
      Next
End Function

Нет необходимости отдельно обрабатывать пробелы, ты уже назначил им значение &H20.
Нет необходимости так же в проверке If InitStatus = False, InitStatus будет всегда False, так как массив CodeTab - локальный, значит и функцию PutRInit делаем Private.

PM MAIL   Вверх
Akina
Дата 30.8.2004, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



cardinal
1) Попробуй посмотреть свою абракадабру в блокноте со шрифтом "Terminal"
2) Вместо извращений с самостоятельным перекодированием строки лучше воспользоваться стандартными API-функциями CharToOEM и OEMToChar



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
cardinal
Дата 30.8.2004, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата(Akina @ 30.8.2004, 07:07)
2) Вместо извращений с самостоятельным перекодированием строки лучше воспользоваться стандартными API-функциями CharToOEM и OEMToChar

Ну я в принципе предполагал, что есть для этого какая нибудь API smile.gif
Цитата(Akina @ 30.8.2004, 07:07)
1) Попробуй посмотреть свою абракадабру в блокноте со шрифтом "Terminal"

Ну меня больше Norton Commander интересовал...
Цитата(bom @ 29.8.2004, 22:03)
значит и функцию PutRInit делаем Private

Это правильно.
Цитата(bom @ 29.8.2004, 22:03)
Нет необходимости так же в проверке If InitStatus = False, InitStatus будет всегда False

При первом запуске PutR да, а потом нет.
Цитата(bom @ 29.8.2004, 22:03)
Нет необходимости отдельно обрабатывать пробелы, ты уже назначил им значение &H20

А я их помоему и не обрабатываю отдельно qstn.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
bom
Дата 30.8.2004, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

Репутация: 4
Всего: 6



Цитата(cardinal @ 30.8.2004, 08:19)
При первом запуске PutR да, а потом нет
Переменная InitStatus и массив CodeTab имеют локальную видимость и инициализируются заново каждый раз когда к функции PutR обращаются из другого модуля smile.gif

Цитата(cardinal @ 30.8.2004, 08:19)
А я их помоему и не обрабатываю отдельно
--!--
Цитата(cardinal @ 29.8.2004, 18:43)
If Text = " " Then...


PM MAIL   Вверх
cardinal
Дата 30.8.2004, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Не
Цитата(bom @ 30.8.2004, 09:32)
If Text = " " Then...

а
Код
If Text = "" Then...

smile.gif
Цитата(bom @ 30.8.2004, 09:32)
Переменная InitStatus и массив CodeTab имеют локальную видимость и инициализируются заново каждый раз когда к функции PutR обращаются из другого модуля

Да, только у того кто пользуется функцией в одном модуле ИМХО меньше головной боли.
Цитата(Akina @ 30.8.2004, 07:07)
2) Вместо извращений с самостоятельным перекодированием строки лучше воспользоваться стандартными API-функциями CharToOEM и OEMToChar

Кстати если их использовать, то не будет возможности сделать например табличку... smile.gif


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
bom
Дата 30.8.2004, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

Репутация: 4
Всего: 6



Цитата(cardinal @ 30.8.2004, 10:51)
Не

Цитата (bom @ 30.8.2004, 09:32)
If Text = " " Then...


а

Код
If Text = "" Then...

ОК, понял. Больше не буду smile.gif

PM MAIL   Вверх
Эд
Дата 1.9.2004, 14:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Добрый день, уважаемый
cardinal!

Как я понял, задача заключается в следующем. В режиме BIN коды пишутся в файл "как есть" без всякого преобразования.
Но под Win весь текст представлен в кодировке 1251, которая, разумеется, в Нортоне читаться не может.
Если проге не требуется писать в файл строк, вводимых непосредственно с клавиатуры, можно сделать проще: все текстовые сообщения для записи в файл, предварительно создать при помощи того же NC, а затем вставить в исходник. (Или перекодировать для исходника в DOS-формат любым другим способом: использовав FAR, "Штирлиц", или, просто, на худой конец, Word).
Если требуется записывать в файл строки, вводимые под Win с клавиатуры или других устройств, без перекодировки не обойтись.
Способ, котрым Вы воспользовались, хорош, но это общий случай для произвольной перекодировки. Объем можно значительно сократить, если учесть некоторые особенности взаимного расположения русских символов в кодировках Win1251 и DOS. У меня, например, давно работает такая перекодировка:

Код

A=ASC(A$)
SELECT CASE A
CASE &h85: B$="_"
CASE &h97: B$="-"
CASE &hA8: B$="р" 'р(rus) = Ё (dos)
CASE &hB8: B$="с" 'с(rus) = ё (dos)
CASE &hAB, &hBB: B$=CHR$(34)
CASE &hC0 TO &hEF: B$=CHR$(A-&h40)
CASE &hF0 TO &hFF: B$=CHR$(A-&h10)
CASE ELSE: B$=A$
END SELECT

Этот фрагмент перекодирует одиночный символ A$ в B$ из WIN1251 в DOS (RUS-"ALT"). Целую строку следует перекодировать посимвольно, составив цикл.

Существует и обратная перекодировка DOS - WIN, она чуть-чуть сложнее:

Код

A=ASC(A$)
SELECT CASE A
CASE &hE0 TO &hEF: B$=CHR$(A+&h10)
CASE &h80 TO &hB0: B$=CHR$(A+&h40)
CASE &hF0: B$=CHR$(&hA8)
CASE &hF1: B$=CHR$(&hB8)
CASE &hF0 TO &hFF: B$=CHR$(A-&h40)
CASE &hB3: B$=CHR$(&hA6)
CASE &hC4: B$=CHR$(&h97)
CASE &hC5: B$=CHR$(&h86)
CASE &hB0 TO &hDF: B$=CHR$(A-&h30)
CASE ELSE: B$=A$
END SELECT

Напоминаю еще раз, что оба фрагмента реализуют частный случай соотношения наборов WIN и DOS. Для общего случая перекодировок подобный метод может оказаться довольно малоэффективным.

Всем пожелания успехов,
Эд

  Вверх
Akina
Дата 1.9.2004, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Ну уж коли на то пошло, еще более разумно держать в виде файлов набор XLAT-таблиц перекодировки (по 256 байт каждая, в строковую переменную считывается и используется). И не забывать учитывать, что иной раз в одной codepage символ есть, а в другой такого нет....


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
cardinal
Дата 2.9.2004, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Цитата
Если проге не требуется писать в файл строк, вводимых непосредственно с клавиатуры, можно сделать проще: все текстовые сообщения для записи в файл, предварительно создать при помощи того же NC, а затем вставить в исходник.

Ну, идея была в принципе сделать так, что без разницы с клавиатуры или нет. Соответственно предварительно ничего создать нельзя.
Цитата
Если требуется записывать в файл строки, вводимые под Win с клавиатуры или других устройств, без перекодировки не обойтись.

Так оно и есть.

Эд, то что ты написал это интересно (особенно перекодировка DOS - WIN). О первом варианте (перекодировка WIN - DOS), я честно говоря задумывался, но вопрос, что лучше вытаскивать из таблицы готовое значение или прыгать по Case'aм, а потом вычитать или еще чего. Я пришел к выводу, что разницы никакой. Преимущества таблицы заключаются наверное все таки в более быстром решении задачи, а вариант "Case" наверно лучше тем, что не надо парить голову таблицей и занимать ей память.
Цитата(Akina @ 1.9.2004, 15:05)
Ну уж коли на то пошло, еще более разумно держать в виде файлов набор XLAT-таблиц

Что такое XLAT таблица?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1311 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.