Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1202078395
Artem
2008-02-04 01:39
2008.03.02
Получить HANDLE незапущенного приложения


2-1202556804
oleg_teacher
2008-02-09 14:33
2008.03.02
События


2-1202236794
fics
2008-02-05 21:39
2008.03.02
Проблемка с цветом компонента на разных ПК


2-1201966506
Jimmy
2008-02-02 18:35
2008.03.02
Opendialog с расширенными возможностями


2-1202123209
Uno-84
2008-02-04 14:06
2008.03.02
Записи в Базе Данных