Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / перекодировка из DOS в WINDOWS кодировку / 12 сообщений из 12, страница 1 из 1
18.06.2003, 09:14
    #32184917
Oleg_A67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из DOS в WINDOWS кодировку
Всем добрый день. Скажу сразу же, Дельфи только начал изучать, так что не судите строго если вопрос ламерский. Вопрос следующий, нужно считать информацию из текстового файла в ДОС кодировке и вывести на форму. Данные считываю построчно командой READLN(F,S) Проблема встала в преобразование значения переменной S в WINDOWS кодировку. Как это сделать. Подскажите не брось те в беде.
...
Рейтинг: 0 / 0
18.06.2003, 09:51
    #32184959
Vladimir_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из DOS в WINDOWS кодировку
Попробуй примерно так:
вместо 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
18.06.2003, 09:54
    #32184963
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из DOS в WINDOWS кодировку
См. CharToOem и OemToChar
...
Рейтинг: 0 / 0
18.06.2003, 10:13
    #32184996
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из DOS в WINDOWS кодировку
Не помню почему, но 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
18.06.2003, 10:33
    #32185025
Voha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из DOS в WINDOWS кодировку
2 Петр
Не знаю, у меня ни каких траблов с ними не было, работает отлично, и велас заново изобретать не надо
...
Рейтинг: 0 / 0
18.06.2003, 10:35
    #32185028
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из DOS в WINDOWS кодировку
нет проблем - изобретено было лет 6 назад
...
Рейтинг: 0 / 0
18.06.2003, 10:57
    #32185066
Oleg_A67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
перекодировка из DOS в WINDOWS кодировку
Петр
спасибо, все отлично работает.

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

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

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

...PChar( s )...

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

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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / перекодировка из DOS в WINDOWS кодировку / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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