Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.6 MB
Время: 0.029 c
7-24244
Bosss20000
2002-05-23 19:02
2002.08.08
Запуск win-приложения из Delphi


3-23955
dzmitry
2002-07-02 10:23
2002.08.08
Btrieve for Linux


1-24117
romik-delphi6
2002-07-26 13:59
2002.08.08
Сохранение параметров


7-24250
Krok
2002-05-22 17:09
2002.08.08
Реальное место на диске


3-23891
Explorer
2002-07-17 08:34
2002.08.08
Count, sum





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский