Форум: "Основная";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
ВнизПроблемы с созданием файла Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c