![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перекодировка файла DOS в Win1251 [D6, WinXP]
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