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

Вниз

Проблемы с созданием файла   Найти похожие ветки 

 
ghg ©   (2002-07-28 12:24) [0]

Вот такая процедура у меня в проге.
Ее цель создать текстовый файл(ы) с информацией взятой из других текстовых файлов.

Если в той папке, в которой мы создаем конечный файл (Path+MapName) есть уже такой (записанный в том же формате), то все делается как надо. Но если такого файла нет, то внутри конечного файла, в зависимости от того как повезет, может быть как все правильно так и всякая лабудень.
Вопрос: отчего так получается и как с этим бороться?

Заранее благодарен.


procedure GetFileName(Path,mask,MapName : string);
var i,hgh,ked,j, handel : integer;
FileMask,s,map_i_name : string;
DirInfo: TSearchRec; ooo,ooo1 : textfile;
ooo2 : textfile;
maxX,maxY,minX,minY : single;
a : single;
hgh_i : array [1..6] of integer;
begin
maxX:=10; minX:=-10; maxY:=10; minY:=-10;
for ked:=1 to Nustan do
begin
j:=1;
FileMask:=Path+"FIELD-"+inttostr(ked)+"\"+mask;
SetLength(Pnm_i[ked],2);
if FindFirst(FileMask, faVolumeID, DirInfo)=0 then
begin
Pnm_i[ked,1]:=Copy(DirInfo.Name,1,length(DirInfo.Name)-4);
while FindNext(DirInfo)=0 do
begin
j:=j+1;
SetLength(Pnm_i[ked],j+1);
Pnm_i[ked,j]:=Copy(DirInfo.Name,1,length(DirInfo.Name)-4);
end;
hgh_i[ked]:=j;
end;
FindClose(DirInfo);
SetLength(Xpik_i[ked],hgh_i[ked]+1);
SetLength(Ypik_i[ked],hgh_i[ked]+1);
for i:=1 to hgh_i[ked] do
begin
s:=Path+"FIELD-"+inttostr(ked)+"\"+Pnm_i[ked,i]+".zvt";
if Fileexists(s) then
begin
assignfile(ooo,s);
reset(ooo);
readln(ooo); readln(ooo); readln(ooo);
readln(ooo); readln(ooo); readln(ooo);
readln(ooo,a,Xpik_i[ked,i],Ypik_i[ked,i]);
flush(ooo);
closefile(ooo);
maxX:=Xpik_i[ked,i]+10; minX:=Xpik_i[ked,i]-10;
maxY:=Ypik_i[ked,i]+10; minY:=Ypik_i[ked,i]-10;
break;
end;
end;
for i:=1 to hgh_i[ked] do
begin
s:=Path+"FIELD-"+inttostr(ked)+"\"+Pnm_i[ked,i]+".zvt";
assignfile(ooo,s);
reset(ooo);
readln(ooo); readln(ooo); readln(ooo);
readln(ooo); readln(ooo); readln(ooo);
readln(ooo,a,Xpik_i[ked,i],Ypik_i[ked,i]);
flush(ooo);
closefile(ooo);
if Xpik_i[ked,i]>maxX then maxX:=Xpik_i[ked,i]+10;
if Xpik_i[ked,i]<minX then minX:=Xpik_i[ked,i]-10;
if Ypik_i[ked,i]>maxY then maxY:=Ypik_i[ked,i]+10;
if Ypik_i[ked,i]<minY then minY:=Ypik_i[ked,i]-10;
end;
map_i_name:=copy(mapname,1,length(mapname)-4);
if fileexists(Path+Map_i_Name+"-"+inttostr(ked)+".sys")=false then
begin
handel:=filecreate(Path+Map_i_Name+"-"+inttostr(ked)+".sys");
fileclose(handel);
end;
assignfile(ooo1, Path+Map_i_Name+"-"+inttostr(ked)+".sys");
rewrite(ooo1);
writeln(ooo1,Region);
writeln(ooo1,uchastok);
writeln(ooo1, minX:15," ", maxX:15," ", minY:15," ", maxY:15);
for i:=1 to hgh_i[ked] do
begin
Keds[i]:=1;
writeln(ooo1, Xpik_i[ked,i]:15," ",Ypik_i[ked,i]:15," ",Keds[i]:15," ",Pnm_i[ked,i]);
end;
writeln(ooo1,"666");
flush(ooo1);
closefile(ooo1);
end;
if fileexists(Path+MapName)=false then
begin
handel:= filecreate(Path+MapName);
fileclose(handel);
end;
assignfile(ooo2, Path+MapName);
rewrite(ooo2);
writeln(ooo2,Region);
writeln(ooo2,uchastok);
writeln(ooo2, minX:15," ", maxX:15," ", minY:15," ", maxY:15);
for ked:=1 to Nustan do
begin
for i:=1 to hgh_i[ked] do
begin
Keds[i]:=1;
writeln(ooo2, Xpik_i[ked,i]:15," ",Ypik_i[ked,i]:15," ",Keds[i]:15," ",Pnm_i[ked,i]);
end;
end;
writeln(ooo2,"666");
flush(ooo2);
closefile(ooo2);
end;


 
Mixir ©   (2002-07-28 16:54) [1]

Ну ты и выложил такую штуку...
readln(ooo); readln(ooo); readln(ooo);
readln(ooo); readln(ooo); readln(ooo);
А в цикле что написать лень?
Ну вообшето ЕСЛИ ты незнал можешь использовать
Append(TextFile) дла дополнения
Reset(TextFile) для чтения
Rewrite (TextFile) для записи/перезаписи.

Попробуй описать фаил как File of Char
Типа: Var F: File of char



 
Ghg ©   (2002-07-29 08:34) [2]

>Ну ты и выложил такую штуку...
> readln(ooo); readln(ooo); readln(ooo);
> readln(ooo); readln(ooo); readln(ooo);
>А в цикле что написать лень?
а разница какая?


>Ну вообшето ЕСЛИ ты незнал можешь использовать
>Append(TextFile) дла дополнения
>Reset(TextFile) для чтения
>Rewrite (TextFile) для записи/перезаписи.
Как видно из кода помню и использую.

>Попробуй описать фаил как File of Char
>Типа: Var F:File of char
А какая разница?

Да вот наверное надо что добавить, что тогда когда в конечный файл пишется лабудень, то в программе возникает AccessViolation, причем намертво. Приходится из taskmanager"a убивать свою прогу.
Если win98, то вообще кранты.

Так что нет мыслей отчего это может происходить?



 
Song ©   (2002-07-29 08:53) [3]

ужас...
ё-моё, а мы Object Pascal обсуждаем....


 
ghg ©   (2002-07-29 08:57) [4]

Ну что есть.
Скажите как лучше буду благодарен.


 
Song ©   (2002-07-29 09:00) [5]

Было бы ещё здесь хоть что-то понятно... Сами по шагам пройдитесь и найдёте ошибку. Мне, если честно трудно в таком количестве кода что-то искать. Код написан для TP.


 
MBo ©   (2002-07-29 09:01) [6]

ты смешиваешь разные методы доступа к файлам
filecreate, rewrite
исходник крайне трудно понять.
Стоит корректно сформулировать задачу, тогда и подсказки будут


 
Opuhshii ©   (2002-07-29 09:04) [7]

>if fileexists(Path+MapName)=false then
>begin
> handel:= filecreate(Path+MapName);
> fileclose(handel);
>end;
что это????...

используй FileStream
TFileStream.Create(const FileName: string; Mode: Word);
Read(var Buffer; Count: Longint): Longint;
Write(const Buffer; Count: Longint): Longint;
CopyFrom(Source: TStream; Count: Longint): Longint;

Определи свою структуру и пиши её в поток,..


 
Opuhshii ©   (2002-07-29 09:06) [8]


>if fileexists(Path+MapName)=false then
>begin
> handel:= filecreate(Path+MapName);
> fileclose(handel);
>end;
и главное зачем???,....
2Song © (29.07.02 08:53)
согласен,.. полностью


 
ghg ©   (2002-07-29 09:10) [9]

Переформулирую.
Как следует создавать текстовый файл следующего формата:
<-------------->
gfghsdk - string
dsdsd - string
453 3543 453 5345 - 4 числа типа single
453 534 3453 fghgrt - 3 числа типа single, 1 string
534 345 345 fdtryrt - то же что до этого
...
...
534 345 345 fdtrrt - то же что до этого
666 - число означающее конец
<-------------->



 
MBo ©   (2002-07-29 09:16) [10]

slist:=TStringlist.create;
slist.add("qtrqtr");
...
slist.add(format("%f %f %f %f",[a1,a2,a3,a4]);
//или с помощью FloatTostr,FormatFloat и т.д.
...
slist.savetofile("e:\qq.txt");
slist.free;


 
ghg ©   (2002-07-29 09:25) [11]

Спасибо будем пробовать.


 
ЮЮ   (2002-07-29 09:45) [12]

Во втором цикле
for i:=1 to hgh_i[ked] do
begin
s:=Path+"FIELD-"+inttostr(ked)+"\"+Pnm_i[ked,i]+".zvt";
assignfile(ooo,s);
нет проверки на существование файла, а отсюда "вылет" из процедуры без корректного закрытия выходного файла. Поэтому в файле может наблюдаться мусорю
Для самой процедуры это не критично, но возможно некорректное обращение к внешним динамическим массивам Pnm_i,Xpik_i,Ypik_i вне процедуры



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

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

Наверх




Память: 0.5 MB
Время: 0.018 c
1-24122
zarem
2002-07-26 14:25
2002.08.08
Нужен Манифест для D5 под XP


6-24148
nedden
2002-05-28 10:32
2002.08.08
Протокол Hotmail


14-24212
Falkon
2002-07-11 21:24
2002.08.08
Выделение строки определенным цветом


1-24068
Dmitry Toropov
2002-07-25 18:22
2002.08.08
И снова удаление файлов :((


14-24209
Dr.Samba
2002-07-13 21:05
2002.08.08
UPX (сжатие файлов EXE).