powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / перекодировка из DOS в WINDOWS кодировку
12 сообщений из 12, страница 1 из 1
перекодировка из DOS в WINDOWS кодировку
    #32184917
Oleg_A67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день. Скажу сразу же, Дельфи только начал изучать, так что не судите строго если вопрос ламерский. Вопрос следующий, нужно считать информацию из текстового файла в ДОС кодировке и вывести на форму. Данные считываю построчно командой READLN(F,S) Проблема встала в преобразование значения переменной S в WINDOWS кодировку. Как это сделать. Подскажите не брось те в беде.
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32184959
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй примерно так:
вместо FileWrite - свои действия

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var bufferANSI : array[ 0 .. 1000 ] of char;
     bufferOEM  : array[ 0 .. 1000 ] of char;
      // вывод в досовской кодировке
      procedure WrStrDOS( s : string );
      begin
        StrPCopy( bufferANSI, s ); AnsiToOEM( bufferANSI , bufferOEM );
        FileWrite( LogFile , bufferOEM , strlen( PChar( s ) ) );
      end;
      // вывод в виндовой кодировке
      procedure WrStrWIN( s : string );
      begin
        StrPCopy( bufferANSI , s );
        FileWrite( LogFile , bufferANSI , strlen( PChar( s ) ) );
      end;
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32184963
Voha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
См. CharToOem и OemToChar
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32184996
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помню почему, но e меня были проблемы с CharToOem и OemToChar
поэтому лови
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
AlfWinChr: array[ 1 .. 66 ]of integer=
( 192 , 193 , 194 , 195 , 196 , 197 , 168 , 198 , 199 , 200 , 201 , 202 , 203 , 204 , 205 ,
  206 , 207 , 208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 , 216 , 217 , 218 , 219 , 220 ,
  221 , 222 , 223 , 224 , 225 , 226 , 227 , 228 , 229 , 184 , 230 , 231 , 232 , 233 , 234 ,
  235 , 236 , 237 , 238 , 239 , 240 , 241 , 242 , 243 , 244 , 245 , 246 , 247 , 248 , 249 ,
  250 , 251 , 252 , 253 , 254 , 255 );

AlfDOSChr: array[ 1 .. 66 ]of integer=
( 128 , 129 , 130 , 131 , 132 , 133 , 240 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 141 ,
  142 , 143 , 144 , 145 , 146 , 147 , 148 , 149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 ,
  157 , 158 , 159 , 160 , 161 , 162 , 163 , 164 , 165 , 241 , 166 , 167 , 168 , 169 , 170 ,
  171 , 172 , 173 , 174 , 175 , 224 , 225 , 226 , 227 , 228 , 229 , 230 , 231 , 232 , 233 ,
  234 , 235 , 236 , 237 , 238 , 239 );

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
function DosToWin(st:string):string;

implementation

{$R *.dfm}


function DosToWin(st:string):string;
var
 len,k,kk:longint;
 lit,litout:string[ 1 ];
 Stout:string;
 ordNom:integer;
 Enter:boolean;
 begin
  if st='' then
   begin
    DosToWin:='';
    exit;
   end;
  stout:='';
  len:=Length(st);
  for k:= 1  to len do
   begin
    lit:=Copy(st,k, 1 );
    ordNom:=Ord(lit[ 1 ]);
    Enter:=False;
    for kk:= 1  to  66  do
     begin
      if ordNom=AlfDosChr[kk] then
       begin
        litOut:=chr(AlfWinChr[kk]);
        Enter:=true;
        Break;
       end;
     end;
    if Enter then stout:=stout+litOut else stout:=stout+lit;
   end;
  DosToWin:=stout;
 end;

end.

...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32185025
Voha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Петр
Не знаю, у меня ни каких траблов с ними не было, работает отлично, и велас заново изобретать не надо
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32185028
Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет проблем - изобретено было лет 6 назад
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32185066
Oleg_A67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петр
спасибо, все отлично работает.

Voha
функции CharToOem и OemToChar видел, но возникли проблемы с преобразованием переменной STRING в Pchar
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32185086
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но возникли проблемы с преобразованием переменной STRING в Pchar

И какого рода проблемы? :-)
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32185149
Oleg_A67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не нашел функцию, которая бы это делало. Искал что-то вроде StringToPchar, но ничего не нашел. Наверное плохо искал :о)
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32185165
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот этот вот кусок кода от Vladimir_ че делает по-твоему?

Код: plaintext
1.
2.
3.
4.
5.
procedure WrStrDOS( s : string );
...

...PChar( s )...

...
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32185240
Oleg_A67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, разробрался и с этим Pchar'ом
...
Рейтинг: 0 / 0
перекодировка из DOS в WINDOWS кодировку
    #32185297
Oleg_A67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как на счет такого кода

var
S, s1: String;
F: TextFile;
p1, p2 :Pchar;
.......
begin
.......
Readln(F, S);
s:=s+chr(0);
s1:=s;
p1:=@s;
p2:=@s1;
oemtochar(p1,p2);
s:=string(p2);
.........
end.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / перекодировка из DOS в WINDOWS кодировку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]