Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перекодировка файла DOS в Win1251 [D6, WinXP]


Страницы:   1 2

galexis ©   (2004-08-09 17:23:00) 

Открываю файл как AssignFile(F, FileEdit.Text);
                Reset(F);
                while not eof(f) do
                begin
                Readln(F, S);
                end;
файл ASCII, а надо win1251
И ведь знаю что легко и не раз делал, но замкнуло и все тут. И найти не могу. Помогите пожалуйста


Alx2   (2004-08-09 19:38:00) [21]

>Андрей Сенченко ©   (09.08.04 19:35) [15]
Я имел в виду следущее:
begin
  Result := aStr;// Инициализация для Result.
                         // Иначе будет  мусор
if aStr <>'' then CharToOem(PChar(Result),PChar(Result));
else Result := aStr; // тогда это не надо.


Андрей Сенченко   (2004-08-09 19:35:00) [22]

Alx2 ©   (09.08.04 19:32) [13]

Нет .. именно это и имелось в виду - сразупойти на более часто встречающийся вариант ( то ес есть непустую строку ) и сэкомить тем самым время выполнения одной операции присвоения.


Андрей Сенченко   (2004-08-09 19:33:00) [23]

символы ;перед elseнаглядно демонстрируют, что самому было лень Delphi загружать :)


Alx2   (2004-08-09 19:32:00) [24]

>Андрей Сенченко ©   (09.08.04 19:26) [12]
Забыл Result := aStr вначале каждой функции. Тогда работать будет и "else" не нужен.


Андрей Сенченко   (2004-08-09 19:26:00) [25]

>> Мастер ©   (09.08.04 17:52) [7]

а если так ?

function Win2Dos(const aStr: String): String;
begin
 if aStr <>'' then CharToOem(PChar(Result),PChar(Result));
 else Result := aStr;

end;

function Dos2Win(const aStr: String): String;
begin
 if aStr <>''then OemToChar(PChar(Result),PChar(Result));
 else Result := aStr;
end;


Мастер   (2004-08-09 18:13:00) [26]

>Sandman25 ©   (09.08.04 17:55) [9]
>VMcL ©   (09.08.04 18:04) [10]

И даже медленнее за счет лишнего вызова LStrLen.


VMcL   (2004-08-09 18:04:00) [27]

>> Sandman25 ©  (09.08.04 17:55) [9]

Почти монопенисуально. Можешь посмотреть CPU Window.


Sandman25   (2004-08-09 17:55:00) [28]

[7] Мастер ©   (09.08.04 17:52)

Тогда уже так:

if Length(Result) = 0 then exit;

Все-таки быстрее, чем строки сравнивать


galexis   (2004-08-09 17:55:00) [29]

Всем спасибо! Все получилось!


Мастер   (2004-08-09 17:52:00) [30]


> VMcL ©   (09.08.04 17:38) [4]
> >>galexis ©  (09.08.04 17:36) [3]
>
> Нет слов, одни выражения.
> FAQ: http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988619604&n=19


В FAQ ошибка.
Правильно будет так:

function Win2Dos(const aStr: String): String;
begin
 Result := aStr;
 if Result='' then Exit;
 CharToOem(PChar(Result),PChar(Result));
end;

function Dos2Win(const aStr: String): String;
begin
 Result := aStr;
 if Result='' then Exit;
 OemToChar(PChar(Result),PChar(Result));
end;


wnew   (2004-08-09 17:48:00) [31]

The OemToCharBufffunction translates a specified number of characters in a string from the OEM-defined character set into either an ANSI or a wide-character string. (OEM stands for original equipment manufacturer.) This function supersedes the OemToAnsiBuff function.

BOOL OemToCharBuff(

   LPCSTR lpszSrc, // pointer to string to translate
   LPTSTR lpszDst, // pointer to buffer for translated string  
   DWORD cchDstLength  // size of buffer
  );


Parameters

lpszSrc

Points to a buffer containing one or more characters from the OEM-defined character set.

lpszDst

Points to the buffer for the translated string. If the OemToCharBuff function is being used as an ANSI function, the string can be translated in place by setting the lpszDst parameter to the same address as the lpszSrc parameter. This cannot be done if the OemToCharBuff function is being used as a wide-character function.

cchDstLength

Specifies the number of characters to translate in the buffer identified by the lpszSrc parameter.



Return Values

The return value is always nonzero.


Sandman25   (2004-08-09 17:39:00) [32]

SetLength(S2, Length(S1));
OemToChar(PChar(S1), PChar(S2));


VMcL   (2004-08-09 17:38:00) [33]

>> galexis ©  (09.08.04 17:36) [3]

Нет слов, одни выражения.
FAQ: http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988619604&n=19


galexis   (2004-08-09 17:36:00) [34]

Только не бейте,

а как строку S перекодировать?


VMcL   (2004-08-09 17:25:00) [35]

>> galexis ©  (09.08.04 17:23)

OemToChar(), CharToOem().


Sandman25   (2004-08-09 17:24:00) [36]

OemToChar


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо