Текущий архив: 2008.03.02;
Скачать: CL | DM;
Вниз
В чем ошибка? Найти похожие ветки
← →
Andrewtitoff © (2008-01-29 13:40) [40]2 Virgo_Style
Тогда я непонимаю немного... =(((
Если неменяя формат файла - то в принципе можно, тока как это сделать без геммороя, я же в этой процедуре после перемещения файла читаю и анализирую содержимое файла...
while not eof(fN1) do
begin
read(fN3,s);
if (s.VPuska="")and(s.Remont<>"Простой") then
begin
str(c,ns);
s.Npp:=ns;
if c<10 then s.Npp:="00"+ns;
if (c>9)and(c<100) then s.Npp:="0"+ns;
c:=c+1;
s.Remont:=sd;
write(fN2,s);
end;
end;
как быть с этим?
← →
Andrewtitoff © (2008-01-29 13:52) [41]2 Сергей М.
ShowMessage(inttostr(SizeOF(myString))) = 671...
хотя странно как то должен быть 653...
а, все верно, значит 671, там же еще служебные символы...
← →
Anatoly Podgoretsky © (2008-01-29 13:53) [42]> Andrewtitoff (29.01.2008 09:45:00) [0]
Полное пренебрежение обработкой исключительных ситуаций.
← →
Anatoly Podgoretsky © (2008-01-29 13:54) [43]> Andrewtitoff (29.01.2008 10:24:05) [5]
> Да погуглил еще вчера, я так понял что 32 ошибка - это значит закрыт доступ к файлу
Странный у тебя Гугл.
← →
Andrewtitoff © (2008-01-29 13:59) [44]2 Сергей М.
18 записей - 18 служебных символов в конце каждой записи...
← →
Сергей М. © (2008-01-29 14:02) [45]
> там же еще служебные символы
Я не про них, а про packed record
← →
Andrewtitoff © (2008-01-29 14:02) [46]2 Anatoly Podgoretsky
Ну я как то не думал еще про них, вроде как файл всего две процедуры и в разное время используют...
← →
Andrewtitoff © (2008-01-29 14:06) [47]2 Сергей М.
В смысле?, чего то я опять недопонимаю...
type
myString = record
Npp : string[3];
Zayavitel : string[12];
Prichina : string[44];
VPost : string[8];
VViezda : string[8];
VPuska : string[8];
Prostoy : string[5];
Remont : string[65];
REGNUM : string[50];
STREET : string[50];
HOUSE : string[50];
CORP : string[50];
PARNUM : string[50];
REGION : string[50];
PLACE : string[50];
BRIGADE : string[50];
HOLDER : string[50];
BELONG : string[50];
end;
один символ - один байт, 653 +18- служебный символ в конце каждой записи... итого 671 байт...
← →
Andrewtitoff © (2008-01-29 14:15) [48]я не паковал, а что это так важно?, чем просто record так плохо?, не такой уж и большой размер то..., правда я тока сейчас нагуглил про packed record, в паскале помоемк такого небыло, вотя и не знал...
← →
Alien1769 © (2008-01-29 14:19) [49]
> в паскале помоемк такого небыло
ошибаешся
← →
DiamondShark © (2008-01-29 14:20) [50]
> Andrewtitoff © (29.01.08 14:02) [46]
> вроде как файл всего две процедуры и в разное время используют...
Это тебе так кажется.
А в этом отношении операционной системе доверия больше, чем тебе, и ОС вовсе недвусмысленно сообщает, когда происходит попытка одновременного доступа.
Если ты не веришь своим глазам, то можешь и дальше продолжать толочь воду в ступе.
← →
Slym © (2008-01-29 14:21) [51]забористая трава...
1. [42] Полное пренебрежение обработкой исключительных ситуаций. +MaxInt
2. Если уж занялся написанием СУБД, делай это нормально: объек напиши реализующий логику/операции в таблице...
← →
Slym © (2008-01-29 14:27) [52]Танцы с бубном типа:
str(c,ns);
s.Npp:=ns;
if c<10 then s.Npp:="00"+ns;
if (c>9)and(c<100) then s.Npp:="0"+ns;
заменяем наs.Npp:=Format("%.3d",[c]);
и без защиты от исключительных ситуаций работать будет по ситуации
← →
Andrewtitoff © (2008-01-29 14:32) [53]2 Alien1769
Не спорю, но я незнал, всегда писал просто record...
2 DiamondShark
Я понимаю, но где тогда еще используется, я уже приводил время когда какая процедура вызывается...
И свое предположение что иногда чюдестным образом таймер с интервалом 1000мс срабатывает чаще чем 1 раз в секунду, тома меня все проигонорировали и ничего по этому поводу не сказали..., в этом случае действительно процедура будет вызвана дважды за 1 сек и фай млжет быть занят ею самой...
2 Slym
Да это СУБД то сложно назвать... =)))
А что такое +MaxInt
А таблица то при чем тут?, оно может и криво написано, но все отлично работает без багов по части вывода таблицы, тем более поля таблицы у меня нельзя редактировать, она только для отображения....
← →
Slym © (2008-01-29 14:32) [54]в глазах не ребит?
строка(MD+"\Z\"+copy(s.STREET,1,10)+".lft")
вычисляется от 3 до 4 раз (а это 3 конкатенации + 1 копирование строк)
← →
Slym © (2008-01-29 14:35) [55]Andrewtitoff © (29.01.08 14:32) [53]
А что такое +MaxInt
в форумах пишут +1 (+ 1 голос) если согласны с автором поста
я же написал +MaxInt (+ 2147483647 голосов) т.е. дофига согласен с автором поста :)
← →
Andrewtitoff © (2008-01-29 14:37) [56]2 Slym
Согласен, спасибо, хотя работает же нормально..., я за дельфи то сел можно сказать пол года назад, раньше когда то на паскале писал, потом большущий перерыв..., так что не обращайте внимания на глупости, а лучше поправьте!
← →
Anatoly Podgoretsky © (2008-01-29 14:39) [57]> Andrewtitoff (29.01.2008 14:37:56) [56]
Что ты сделал из того, что написали выше, сделал ли обработку исключительных ситуаций, провел ли трассировку програмы.
← →
Andrewtitoff © (2008-01-29 14:41) [58]2 Slym ©
>в глазах не ребит?
Ну в принципе конечно не очень выглядит конечно, а что тут уж очень плохого то?, разве лучше кучу переменных что бы прога и так не самая маленькая побольше еще стала? =)))
← →
DiamondShark © (2008-01-29 14:54) [59]
> Andrewtitoff © (29.01.08 14:41) [58]
> 2 Slym ©
> >в глазах не ребит?
> Ну в принципе конечно не очень выглядит конечно, а что тут
> уж очень плохого то?,
Т.е. ты не понимаешь, как работают строковые операции? Т.е. ты не понимаешь, что подобное выражение приводит к частому перераспределению памяти кучи мелкими кусочками?
← →
ANB © (2008-01-29 14:55) [60]
> и у меня никакого желания нету переделывать ВСЕ
Переделай ВСЕ, но только касающееся работы с файлами.
Причем структура файла никак не изменится.
А со стандартными паскалевскими функциями будешь постоянно выгребать проблемы.
← →
Andrewtitoff © (2008-01-29 14:56) [61]2 Anatoly Podgoretsky
Еще нет, подскажите как лучше это сделать?, а как трассировку то сделать?, я уже минут 15 [F7] держу он все еще по GEMMEM.INC прыгает...
← →
Сергей М. © (2008-01-29 15:00) [62]
> как трассировку то сделать?, я уже минут 15 [F7] держу он
> все еще по GEMMEM.INC прыгает
Подержи еще недельку-другую - авось выйдешь из леса)
Книжки-то умные на эту тему когда почитать сподобишься ?
← →
Andrewtitoff © (2008-01-29 15:00) [63]2 ANB
Ну так подскажи как реализовать то что я написал в [40]?....
2 DiamondShark
Ну там же всего 3 раза повторяется copy(s.STREET,1,10), а остальной путь все равно меняется...
← →
DiamondShark © (2008-01-29 15:01) [64]
> Andrewtitoff © (29.01.08 14:32) [53]
> 2 DiamondShark
> Я понимаю, но где тогда еще используется, я уже приводил
> время когда какая процедура вызывается...
> ..
Если ты предпочитаешь продолжать гадать на кофейной гуще, вместо следования рекомендациям, которых дали уже достаточно, что ж... хозяин -- барин.
> И свое предположение что иногда чюдестным образом таймер
> с интервалом 1000мс срабатывает чаще чем 1 раз в секунду,
> тома меня все проигонорировали и ничего по этому поводу
> не сказали..., в этом случае действительно процедура будет
> вызвана дважды за 1 сек и фай млжет быть занят ею самой.
Т.е. ты не понимаешь ещё и как таймер работает?
Правильно проигнорировали. Если у тебя программа однопоточная, то ничто на свете не заставит твои процедуры занять файл одновременно, ни таймер, ни лысый чорт.
Кстати, текста второй процедуры мы в глаза не видели. Может она там забывает файл закрыть...
← →
Andrewtitoff © (2008-01-29 15:05) [65]2 Сергей М
> Книжки-то умные на эту тему когда почитать сподобишься ?
честно говоря я в жизни не одной книжки по программированию не прочитал..., когда на паскале програмисся - было с кем поговорить, я считаю что всегда лучше спросить....
Неужели так сложно подсказать?...
В Паскале все несколько подругому было, там [F8] и все дела, а тут то это ни к чему не приведет..., он по .dproj попрыгает, а в юниты и даже неподумает заглянуть... =(((
← →
Сергей М. © (2008-01-29 15:06) [66]
> там [F8] и все дела
Что, и точек останова в тамошнем отладчике не существовало ?
Вот уж не ври)
← →
Сергей М. © (2008-01-29 15:08) [67]
> я в жизни не одной книжки по программированию не прочитал
Это печально. Очень печально.
> считаю что всегда лучше спросить
Абсолютно неверно считаешь.
← →
Andrewtitoff © (2008-01-29 15:12) [68]2 DiamondShark
Подскажи пожалуйста про таймер!, у меня там интервал 1000 стоит - т.е. 1с, таймер у меня один в программе, процедуры обе вызываются из него одна(приведенная в самом начале) в 00:01:00, вторая в 00:15:00,00:30:00,00:45:00,00:00:00....
Вот текст второй процедуры:
procedure checkP;
var
fP1 : file of myString;
fP2 : file of myString;
s : myString;
s1,s2 : string;
h1,h2 : integer;
m1,m2 : integer;
code:integer;
fp : longint;
begin
If FileExists(MD+"\z.lft")then
begin
if FileExists(MD+"\p.lft") then
begin
AssignFile(fP1,MD+"\z.lft");
AssignFile(fP2,MD+"\p.lft");
reset(fP1);
reset(fP2);
while not eof(fP2) do
begin
read(fP2,s);
end;
read(fP1,s);
s1:=SysTime;
if pos(":",s1)=2 then s1:="0"+s1;
val(copy(s1,1,2),h1,code);
val(copy(s1,4,2),m1,code);
while not eof(fP1) do
begin
read(fP1,s);
if (s.Remont<>"")and(s.Prostoy="")and(s.VPuska="")then
begin
s2:=s.VPost;
val(copy(s2,1,2),h2,code);
val(copy(s2,4,2),m2,code);
if (h2<h1)and(s.Remont<>"Простой") then begin s.Remont:="";s.Zayavitel:=SysDate;write(fP2,s);fp:=filepos(fP1); seek(fP1,fp-1);s.Remont:="Простой"; write(fP1,s);seek(fP1,fp); end;
if (h2=h1)and(s.Remont<>"Простой") then if m2<m1 then begin s.Remont:="";s.Zayavitel:=SysDate;write(fP2,s);fp:=filepos(fP1); seek(fP1,fp-1);s.Remont:="Простой"; write(fP1,s);seek(fP1,fp); end;
end;
end;
closeFile(fP1);
closeFile(fP2);
h1:=CountStringFile(MD+"\p.lft");
AssignFile(fP2,MD+"\p.lft");
reset(fP2);
for h2:=1 to h1 do
begin
seek(fP2,h2);
read(fP2,s);
str(h2,s1);
s.Npp:=s1;
if h2<10 then s.Npp:="00"+s.Npp;
if (h2>9)and(h2<100) then s.Npp:="0"+s.Npp;
if s.VViezda<>"Hidden" then s.VViezda:="Visible";
seek(fP2,h2);
write(fP2,s);
end;
CloseFile(fP2);
end else
begin
AssignFile(fP1,MD+"\z.lft");
AssignFile(fP2,MD+"\p.lft");
reset(fP1);
rewrite(fP2);
ClearString(s);
s.BRIGADE:="Простой на";
s.STREET:=SysDate;
s.Zayavitel:="Начат в:";
s.Prichina:=copy(DateTimeToStr(time),12,8);
if pos(":",s.Prichina)=2 then s.Prichina:="0"+s.Prichina;
write(fP2,s);
read(fP1,s);
s1:=SysTime;
if pos(":",s1)=2 then s1:="0"+s1;
val(copy(s1,1,2),h1,code);
val(copy(s1,4,2),m1,code);
while not eof(fP1) do
begin
read(fP1,s);
if (s.Remont<>"")and(s.Prostoy="")and(s.VPuska="")then
begin
s2:=s.VPost;
val(copy(s2,1,2),h2,code);
val(copy(s2,4,2),m2,code);
if (h2<h1)and(s.Remont<>"Простой") then begin s.Remont:="";s.Zayavitel:=SysDate;write(fP2,s);fp:=filepos(fP1); seek(fP1,fp-1);s.Remont:="Простой"; write(fP1,s);seek(fP1,fp); end;
if (h2=h1)and(s.Remont<>"Простой") then if m2<m1 then begin s.Remont:="";s.Zayavitel:=SysDate;write(fP2,s);fp:=filepos(fP1); seek(fP1,fp-1);s.Remont:="Простой"; write(fP1,s);seek(fP1,fp); end;
end;
end;
closeFile(fP1);
closeFile(fP2);
h1:=CountStringFile(MD+"\p.lft");
AssignFile(fP2,MD+"\p.lft");
reset(fP2);
for h2:=1 to h1 do
begin
seek(fP2,h2);
read(fP2,s);
str(h2,s1);
s.Npp:=s1;
if h2<10 then s.Npp:="00"+s.Npp;
if (h2>9)and(h2<100) then s.Npp:="0"+s.Npp;
if s.VViezda<>"Hidden" then s.VViezda:="Visible";
seek(fP2,h2);
write(fP2,s);
end;
CloseFile(fP2);
end;
end;
if formShow_.Visible then
begin
FormShow_.Hide;
FormShow_.Show;
end;
end;
и соответственно таймер, что бы вопросов небыло... :
procedure TFormMain.Timer1Timer(Sender: TObject);
begin
t:=now;
SysTime:=copy(DateTimeToStr(time),12,8);
SysDate:=copy(DateTimeToStr(t),1,10);
if pos(":",SysTime)=2 then SysTime:="0"+SysTime;
FormMain.Label1.Caption:=DateTimeToStr(t);
if ((copy(SysTime,4,2)="00")and(copy(SysTime,7,2)="00"))or((copy(SysTime,4,2)="15") and(copy(SysTime,7,2)="00"))or((copy(SysTime,4,2)="30")and(copy(SysTime,7,2)="00 "))or((copy(SysTime,4,2)="45")and(copy(SysTime,7,2)="00"))then checkP;
if (copy(DateTimeToStr(time),12,8))=("0:01:00") then AssignNewSk;
if form_New.Active then form_New.VPost.Caption:=copy(DateTimeToStr(time),12,8);
end;
← →
Сергей М. © (2008-01-29 15:13) [69]
> тут то это ни к чему не приведет
Опять же не ври.
Ловишь брейкпойнт в начале трассируемого кода - и вперед ! Жми свою любимую [F8] - и никакие getmem.inc-дебри не страшны)
← →
boriskb © (2008-01-29 15:13) [70]> Andrewtitoff ©
Знаешь на что похоже?
Задумал я построить сарай.
Хоть и не смыслю нифига в строительстве, но "Ну не дом же - чо там строить то?" Тем более я в детстве зАмки из песка делал.
Построил.
Целых 2 месяца стоял. Я не нарадовался.
И вот по соседней дороге трактор проехал - у меня сарай и покосился. Даже не рухнул, но использовать уже толком нельзя.
Вот и пошел я за советом к строителям.
А они меня на смех: ну кто ж так строит? Это какая-никая наука. Переделывать все надо.
Я им - да некогда да и нензачем переделывать. Стоял - же? Функционировал. Вы только мне подскажите: может какой столб поглубже вкопать? Может балку потолще? Может гвозди вот здесь не на 80, а сотку надо брать....
Спрогнозируй результат такой дискуссии.
Что в конце получится?
← →
Andrewtitoff © (2008-01-29 15:17) [71]2 Сергей М.
>Что, и точек останова в тамошнем отладчике не существовало ?
существовали конечно, просто там вполне мне хватало [F8].....
Это конечно все хорошо, тока почему вы мне нехотите помочь с моей конкретной проблемой?
А с трассировкой там тоже не все так просто..., я вот сейсас уже раз 40 вызвал процедуру - никакой ошибки, она возникает не так часто и в самый неподходящий момент... =(((
← →
ANB © (2008-01-29 15:22) [72]
> Andrewtitoff © (29.01.08 14:56) [61]
Бряк поставь в нужном месте и нажми Ф9
← →
Andrewtitoff © (2008-01-29 15:22) [73]2 boriskb
Так я же говорю что я непротив переделать операции с файлами, тока я незнаю как это правильно сделать, смотри [40], а тип файла я переделать немогу, так как этот файл используется другими моими приложениями, да и программой уже люди пользуются...(а шошибка гдето 1-2 раза в неделю выскакивает....), так что все уже невозможно поменять, покрайне мере нужно сначала это исправить тогда что бы в то время когда я буду новую писать люди этой пользовались....
← →
Andrewtitoff © (2008-01-29 15:25) [74]2 ANB
Спасибо, тока я же говорю, что уже раз 50 вызвал процедуру - никакой ошибки..., так обычно всегда было..., а когда людям в пользование отдаешь начинается 1-2 раза в неделю..., а там половина бабушек сидят лет под 50-60, которые что такое мышка узнали пол года назад...
← →
ANB © (2008-01-29 15:28) [75]
> Andrewtitoff © (29.01.08 15:17) [71]
1. Настрой программу так, чтобы она работала почаще - чтобы ловить ошибку
2. Книжки надо читать
3. Починай про болки трай эксепт и трай файналли и закрытие файлов аккуратно загони в файналли (скорее всего в этом и проблема).
4. При входе в обработчик таймера на всякий случай выключай его. А в файналли обратно включай.
Тогда может починится и без переделки.
← →
Сергей М. © (2008-01-29 15:35) [76]
> существовали конечно, просто там вполне мне хватало [F8].
Времена изменились. Теперь вот не хватает, так что ты теперь муха в янтаре)
> очему вы мне нехотите помочь с моей конкретной проблемой?
Кому, скажи на милось, охота в этом дерьме копаться ?)
В сто раз проще, зная ТЗ (а оно, чувтвуется, примитивное), переписать все это с нуля)
← →
_xxx_ (2008-01-29 15:40) [77]
procedure TFormMain.Timer1Timer(Sender: TObject);
begin
---censored---
end;
ой ой ой..... что делается-то......... :-(
← →
Игорь Шевченко © (2008-01-29 15:42) [78]
> Это конечно все хорошо, тока почему вы мне нехотите помочь
> с моей конкретной проблемой?
Ну не хотим.
← →
Andrewtitoff © (2008-01-29 15:42) [79]2 ANB
1)Так я и так сижу запустил ее и часы перевожу туда - сюда....
2) попробую, тока времени почти нет... =(((
подскажи кстати какую нить толковую книгу и где ее скачать можно
3)А в двух словах нельза рассказать для начала, а то пока я до книги дойду... =)))
4)Я уже думал над этим, так и зделаю, сразу по входе в процедуру, а по выходу включать, тока не таймер, а просто в условие еще одну переменную влеплю что бы во время выполнения процедуры она ненароком еще раз не вызвалась...
← →
ANB © (2008-01-29 15:53) [80]
> тока не таймер, а просто в условие еще одну переменную влеплю
> что бы во время выполнения процедуры она ненароком еще раз
> не вызвалась...
По любому вызовется. Надежнее выключить таймер. Впрочем, таймер не сработает и так, если не вызывается обработка сообщений. Но лучше его рубануть, т.к. заранее все предусмотреть тяжело.
А часы переводить - отстой. Не тот объем. Заставь лучше прогу запускаться раз в 2 секунды и жди ошибку.
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2008.03.02;
Скачать: CL | DM;
Память: 0.66 MB
Время: 0.026 c