Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
ВнизКак перекодировать String в DOS-кодировку ? Найти похожие ветки
← →
_Вован (2005-06-15 13:09) [0]Привет, Мастера! Такая проблема: пишу в открытый текстовый файл продедурой WriteLn, которая требует переменной типа String.
Как сделать так, чтобы в файл попал текст в DOS-кодировке?
← →
Anatoly Podgoretsky © (2005-06-15 13:24) [1]CharToOem
← →
_Вован (2005-06-15 15:13) [2]Anatoly Podgoretsky ©
Если бы это было так просто, армянское радио.... :)
Вот есть такой способ:
http://www.books.ru/library/delphi_secrets/10.htm
Но он хорош для ОДНОРАЗОВОГО применения. Т.е. когда такую функцию юзаешь в цикле, она виснет на случайном проходе - каждый раз на разном. Exception получается EInvalidPointer with message "Invalid pointer operation".
← →
Anatoly Podgoretsky © (2005-06-15 15:17) [3]У тебя ошибка в программе.
← →
_Вован (2005-06-15 15:32) [4]Anatoly Podgoretsky ©
Не может быть! :)
На основе вышеприведенной ссылки сделал такую функцию:
function TForm.WinToDOS(S: String): String;
var
Src, Str: PChar;
begin
Memo1.Lines.Text:=S;
GetMem(Str, Length(Memo1.Lines.Text));
Src := Memo1.Lines.GetText;
CharToOem(Src, Str);
Memo2.Lines.SetText(Str);
FreeMem(Str);
Result:=Memo2.Lines.Text;
end;
Т.е. функция берет строковую переменную в Win-кодировке и возвращает в DOS-кодировке.
Прикол в том, что если в строчку текстового файла на диск писать как часть ОДНУ такую полученную функцией WinToDOS переменную, то всё работет нормально на любом количестве циклов.
var
c: String;
...
while ... do begin
c:=<что-то>+WinToDOS(stroka)+<что-то_ещё>;
WriteLn(Kfile,c);
end;
тогда всё ок. Но если сделать так:
...
c:=<что-то>+WinToDOS(stroka1)+<что-то_ещё>+WinToDOS(stroka2)+<...>;
WriteLn(Kfile,c);
...
тогда "Invalid pointer operation".
Как думаешь, в чём здесь ошибка??
← →
Alexander Panov © (2005-06-15 16:00) [5]_Вован (15.06.05 15:32) [4]
Даже разбираться не хочется.function Win2Dos(const aStr: String): String;
begin
Result := aStr;
if Result="" then Exit;
CharToOem(PChar(Result),PChar(Result));
end;
← →
Anatoly Podgoretsky © (2005-06-15 16:03) [6]Ну точно ошибка, зачем же пытаться конвертировать пустые строки, чтобы получить ошибку наверно.
Alexander Panov © (15.06.05 16:00) [5]
Надо бы поправить, чтобы не было побочных эффектов.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c