Главная страница
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.014 c
3-23488
SkyR
2002-06-17 01:48
2002.07.08
Как очистить БД InterBase от старых данных...


4-23840
KarlovAF
2002-05-06 05:40
2002.07.08
Как убрать форму из панели задач?


3-23469
Jawdet
2002-06-14 20:32
2002.07.08
ADO


3-23490
Wild
2002-06-17 10:25
2002.07.08
TQuery + SQL Server CURSOR


14-23740
ev
2002-06-01 20:17
2002.07.08
распределенная БД