Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.08;
Скачать: CL | DM;

Вниз

Глючит CharToOEM   Найти похожие ветки 

 
Voldemar ©   (2002-06-26 19:58) [0]

Доброе время суток!
У меня странно глючит вот такой код:
var TS1, TS2: TStringList;
cnd: cardinal;
St1, St2: PChar;



begin
TS1:=TStringList.Create;
TS2:=TStringList.Create;
try
TS1.LoadFromFile(ParamStr(1));
except
begin
writeln("File not found!");
exit;
end;
end;

for cnd:=0 to TS1.Count-1 do begin
St1:=Pchar(TS1.Strings[cnd]);
St2:=AllocMem(Length(St1));
CharToOem(St1,St2);
TS2.Add(string(St2));
FreeMem(St2);
end;

TS2.SaveToFile(ChangeFileExt(ParamStr(1),".cnd"));
TS1.Free;
TS2.Free;
end.

Когда запускаешь из IDE - выдает EInvalidPointer, а когда из шелла - выкидывает ошибку "Неизвестное программное исключение в модуле Program.exe"
Причем результирующий файл пишется правильно! Пробовал отловить зависимость от размера файла (до 30000 строк), от размера строки (до 700 символов) - не нашел :(. Т.е. может проглотить огромную строку, а на коротенькой глюкнуть. Даже на какой конкретно команде вылетает ошибка, определить не могу, но где-то внутри цикла.


 
rhf ©   (2002-06-26 20:04) [1]

при работе с чарТоОем и оемТоЧар можно и даже полезно в качестве параметров передавать одну и ту же переменную....


 
rhf ©   (2002-06-26 20:15) [2]

твой кусок кода у меня работает...без ошибок.... вот только результаты неправильные :(

делай лучше так

for cnd:=0 to TS1.Count-1 do begin
St1:=Pchar(TS1.Strings[cnd]);
CharToOem(St1,St1);
TS2.Add(string(St1));
end;


 
Voldemar ©   (2002-06-26 20:43) [3]

> rhf © (26.06.02 20:15)
так лучше, но когда файл больше 1.5 метров, вылетает ошибка Память не может быть "written"...


 
rhf ©   (2002-06-26 21:03) [4]

а при чем тут размер файла... не понятно... в каком месте он вылетает.......

кстати можно сделать все без цикла


st1:=ts.getText;
charToOem(st1,st1);
ts.text:=string(st1);


тестил на 2 с половиной метрах.......


 
Voldemar ©   (2002-06-26 23:02) [5]

>rhf © (26.06.02 21:03)
Оказалось, размер не причем... Сгенерил файл около 200 метров - нормально отработало... А вот на одном конкретном файле глючит. В шелле вылетает ошибка Exception EAccessViolation in module user32.dll at 000234D3.
Попробую сделать последним способом:)


 
Voldemar ©   (2002-06-26 23:17) [6]

Вот теперь получилось! И даже на 200-метровом файле... Спасибо огромное, а я-то му**лся :))



Страницы: 1 вся ветка

Текущий архив: 2002.07.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
1-23539
Vladimir.st
2002-06-26 16:25
2002.07.08
Помогите разобраться со StringGirid ом


14-23760
Дмитрий_Б
2002-06-06 08:32
2002.07.08
Сказки вслух


6-23722
slabur
2002-04-26 14:19
2002.07.08
Как проверить URL (работает или отсутствует)?


6-23694
Dmitriy_0
2002-04-25 10:32
2002.07.08
Как работать со своим SMTP ?


3-23508
Awex
2002-06-17 13:14
2002.07.08
InterBase 6.0.1 - INET/inet_error: read errno = 10054