Twilight_Wolf
Новичок
- Сообщения
- 16
- Репутация
- 0
Здравствуйте! Столкнулся с трудностями по редактированию досовского файла средствами Autoit.
Задача: открыть текстовый файлик, найти в нем все символы Chr(0) и заменить их на пробелы с последующим сохранением файла в той же кодировке.
Пробовал так:
Нулевой символ находится точно, меняется на что угодно ( в данном случае на пробел), но при записи результата в файл, получаются либо кракозябры, либо что-угодно, только не то, что нужно. В описании функции FileWrite прочитал, что по умолчанию текст пишется в кодировке ANSI, но может быть и в unicode, если файл открыт соответствующим образом для записи. А как быть с кодировкой 866 или какой-либо другой?
Натолкните на умную мысль)
Исходный досовский файлик прикрепил.
Для полноты картины обрисую ситуацию:
Есть старенькая программа, написанная на языке clipper исходников которой у нас нет. Из нее выводилась печатная форма на LPT принтер ( матричный). Принтер приказал долго жить, поэтому появилась задача печатать на лазерном принтере. Для этого нашлась замечатальная программка DosPRN, которая вполне справляется с такой задачей. Но, как выяснилось, в печатной форме кроме псевдографики, текста и пробелов каким-то образом используются символ, который в последствии был идентифицирован как Chr(0). По неизвестным нам законам, lpt принтер воспринимал символ Chr(0) как Chr(32) и все печаталось нормально, но вот в случае DosPRN символ Chr(0) просто пропускается и в результате часть печатной формы уезжает и сильно искажается.
Задача: открыть текстовый файлик, найти в нем все символы Chr(0) и заменить их на пробелы с последующим сохранением файла в той же кодировке.
Пробовал так:
Код:
#include <array.au3>
#include <Encoding.au3>
#include "WinAPIEx.au3"
$File = FileOpen("fprint.txt", 16)
dim $msg, $t
While 1
$t = FileRead($file, 1)
If @error Then ExitLoop
If $t <> Chr(0) Then $msg &= BinaryToString($t)
If $t = Chr(0) Then $msg &= Chr(032)
WEnd
MsgBox(4096, "", $msg)
MsgBox(4096, "", _WinAPI_OemToChar($msg))
MsgBox(4096, "", _Encoding_ANSIToUTF8($msg))
MsgBox(4096, "", _Encoding_Oem2ANSI($msg))
FileWrite("dos.txt", $msg)
Нулевой символ находится точно, меняется на что угодно ( в данном случае на пробел), но при записи результата в файл, получаются либо кракозябры, либо что-угодно, только не то, что нужно. В описании функции FileWrite прочитал, что по умолчанию текст пишется в кодировке ANSI, но может быть и в unicode, если файл открыт соответствующим образом для записи. А как быть с кодировкой 866 или какой-либо другой?
Натолкните на умную мысль)
Исходный досовский файлик прикрепил.
Для полноты картины обрисую ситуацию:
Есть старенькая программа, написанная на языке clipper исходников которой у нас нет. Из нее выводилась печатная форма на LPT принтер ( матричный). Принтер приказал долго жить, поэтому появилась задача печатать на лазерном принтере. Для этого нашлась замечатальная программка DosPRN, которая вполне справляется с такой задачей. Но, как выяснилось, в печатной форме кроме псевдографики, текста и пробелов каким-то образом используются символ, который в последствии был идентифицирован как Chr(0). По неизвестным нам законам, lpt принтер воспринимал символ Chr(0) как Chr(32) и все печаталось нормально, но вот в случае DosPRN символ Chr(0) просто пропускается и в результате часть печатной формы уезжает и сильно искажается.