www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Prvi koraki v Delphiju - 20-ti dan.
Pojdi na stran Prejšnja  1, 2, 3, 4, 5  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Pon Okt 29, 2007 12:26 pm    Naslov sporočila:   Odgovori s citatom

Help sem "obrnil" a nisem našel. A mogoče obstaja kaka funkcija slična FileAge, ki bi namesto nastanka datoteke vrnila nastanek direktorija?
_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Pon Okt 29, 2007 1:24 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
Help sem "obrnil" a nisem našel. A mogoče obstaja kaka funkcija slična FileAge, ki bi namesto nastanka datoteke vrnila nastanek direktorija?

Tudi direktorij je datoteka, le file atribute moraš pravilno nastaviti!

Lp GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Pon Okt 29, 2007 4:06 pm    Naslov sporočila:   Odgovori s citatom

GJ je napisal/a:
Silvo je napisal/a:
Help sem "obrnil" a nisem našel. A mogoče obstaja kaka funkcija slična FileAge, ki bi namesto nastanka datoteke vrnila nastanek direktorija?

Tudi direktorij je datoteka, le file atribute moraš pravilno nastaviti!

Lp GJ


FileAge nisem znal pripravilt, da bi vrnila datum nastanka direktorija.

FileAge('C:\Windows') trmasto vrača -1 (datoteka ne obstaja);

Uspel pa sem malo drugače:

Koda:
procedure TForm1.Button2Click(Sender: TObject);
var spisek:TSearchRec;
begin
  FindFirst('c:\windows',faAnyFile,spisek);
  Edit1.Text:=DateToStr(FileDateToDateTime(spisek.Time));
  FindClose(spisek);
end;

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Pon Okt 29, 2007 4:52 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
FileAge nisem znal pripravilt, da bi vrnila datum nastanka direktorija.


Saj tega se niti ne da! Rolling Eyes
Ampak tale tvoja koda vseeno ne deluje tako kot bi morala!
Verjetno te zanima ftCreationTime in ne ftLastAccessTime???
Pravilno bi bilo nekako takole..
Koda:
procedure TForm1.Button6Click(Sender: TObject);
var
  spisek:TSearchRec;
  LocalFileTime: TFileTime;
  Time: Integer;
begin
  FindFirst('c:\windows',faDirectory, spisek);
  FileTimeToLocalFileTime(spisek.FindData.ftCreationTime, LocalFileTime);
  FileTimeToDosDateTime(LocalFileTime, LongRec(Time).Hi, LongRec(Time).Lo);
  Edit1.Text:= DateToStr(FileDateToDateTime(Time));
  FindClose(spisek);
end;


Pa atribut moraš nastaviti na 'faDirectory' sicer lahko FindFirst najde file s tem imenom pa bo štala..

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Pon Okt 29, 2007 5:04 pm    Naslov sporočila:   Odgovori s citatom

GJ hvala.

Tole tvojo proceduro moram preštudirat, atribut sem sicer že postavil na faDirectory (očitno kasneje kot sem kodo pripel na forum) Zanima me seveda čas kreiranja direktorija. V mojem primeru sicer vrača pravilno vrednost. Vrjetno zato, ker se ob "rabi" vrednost ne spreminja?

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Pon Okt 29, 2007 5:37 pm    Naslov sporočila:   Odgovori s citatom

Time, ki ga bereš ti je ftLastWriteTime (in ne ftLastAccessTime kot sem napisal) določi se znotraj FindFirst procedure, ki klice FindMatchingFile.

He, he... morda še ne veš..
Drži tipko 'Ctrl' in pojdi z miško nad ukaz 'FindFirst' v tvoji kodi programa, ko se ta obarva modro klikni (leva tipka na miški) in skočil boš v proceduro 'FindFirst'.

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Pon Okt 29, 2007 6:04 pm    Naslov sporočila:   Odgovori s citatom

GJ je napisal/a:
Time, ki ga bereš ti je ftLastWriteTime (in ne ftLastAccessTime kot sem napisal) določi se znotraj FindFirst procedure, ki klice FindMatchingFile.

He, he... morda še ne veš..
Drži tipko 'Ctrl' in pojdi z miško nad ukaz 'FindFirst' v tvoji kodi programa, ko se ta obarva modro klikni (leva tipka na miški) in skočil boš v proceduro 'FindFirst'.

LP GJ


Zakon!! Cool Seveda tega nisem vedel d'oh!

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Pon Okt 29, 2007 7:02 pm    Naslov sporočila:   Odgovori s citatom

Silvo je napisal/a:
Zakon!! Cool Seveda tega nisem vedel d'oh!

Morda le še tole..

Delphi omogoča debugiranje tudi znotraj Delphi-jevih 'unit-ov', to je pri raziskovanju zelo uporabno.

Odkljukaš v project/Options/Compiler/Use Debug DCUs nakar v tvoji kodi nastaviš break point v tisti vrstici kjer imaš napisano recimo 'FindFirst'.
Break point nastaviš tako, da klikneš na vmesno sivo polje 'guter' na levem robu okna in vrstica se ti obarva rdeče.
Ko program pride do 'break point-a' se le ta ustavi in sedaj lahko debugiraš.
S pritiskom na F8 se izvede ena cela vrstica.
Če pa pritisneš F7 bo debuger skočil v procedure 'FindFirst', seveda le če Delphijevo okolje najde ustrezen unit.
Tipka F9 nadaljuje program.
Tipka pa Ctrl-F2 prekine program.

Posamezne variable lahko gledaš v 'Watch' oknu (predhodno jo seveda vneseš), ali pa da postaviš miškin kurzor na željeno variablo in malo počakaš.

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.61
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Okt 30, 2007 1:59 pm    Naslov sporočila:   Odgovori s citatom

Pomoč prosim!

V Delphiju packam eno binarno datoteko, v kateri bodo podatki tipa Array of Single in Array of Integer.
Na začetku pa bi rad dodal eno besedilo, da se tudi v Notepadu vidi opis vsebine.
Koda je tole:
Koda:
var
  BinFileSave: File;
  zacetni_txt : string;
---------------
   AssignFile(BinFileSave, FileName);
   Rewrite(BinFileSave, 1); // record size = 1

  // točno 100 znakov besedila + 3 kontrolni znaki (ESC ta prekinitev izpisa ob TYPE ukazu)
  zacetni_txt :=
'v10 Shranjen buffer meritev                                                                         '
  + #13 + #10 + #27;

  BlockWrite(BinFileSave, zacetni_txt, Length (zacetni_txt));
  // tukaj bo vpis binarnih podatkov
  CloseFile(BinFileSave);


Length vrne pravilno število znakov (=103). Tudi kreirana datoteka je dolga 103 byte.
Vsebina datoteke pa je:
Koda:
¤ŤJ ˆŕ­ @¶© üö Š·D `˘ /NC X÷ -OC `˘ ‚˛D X÷ `ů `˘ Üö ˆbB~Zńwď (X‹x ď (˛„A~       |       


Confused
Help!

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Tor Okt 30, 2007 3:51 pm    Naslov sporočila:   Odgovori s citatom

Mogoče takole? meni dela.
Koda:

var
  BinFileSave: File;
  zacetni_txt :array[1..103] of char;
  tekst:string;
  x:integer;
begin
   AssignFile(BinFileSave,'nov.txt');
   Rewrite(BinFileSave, 1); // record size = 1

  // točno 100 znakov besedila + 3 kontrolni znaki (ESC ta prekinitev izpisa ob TYPE ukazu)

    tekst:='v10 Shranjen  buffer meritev                                                                         '
     + #13 + #10 + #27;

      for x:=1 to length(zacetni_txt) do zacetni_txt[x]:=tekst[x];

  BlockWrite(BinFileSave, zacetni_txt, Length (zacetni_txt));
  // tukaj bo vpis binarnih podatkov
  CloseFile(BinFileSave);

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.61
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Okt 30, 2007 4:38 pm    Naslov sporočila:   Odgovori s citatom

Silvo hvala za idejo, tale BlockRead očitno ne zna delati s String-i. Z Arrayi pa lepo dela. Sem uredil na tvoj način.

Pa še en problem je
Length () dololoča število elementov v arrayu
SizeOf () pa določi dejansko velikost enega elementa spremenljivke v RAMu. Če je spremenljivka tipa Array of Single, potem SizeOf vrne vrednost 4, ker Single zasede 4 byte Exclamation
Deluje tudi "SizeOf (Integer)".

Za BlockWrite je uporaben samo Length(), ker ne šteje dejansko zasedenih bytov ampak elemente v arrayu. Tako piše v Help-u. Ampak, če naredim BlockWrite z Length, mi naredi prekratko datoteko (premalo podatkov, sodeč po dolžini fajla).
Če pa naredim BlockWrite z Length * SizeOf, je dolžina datoteke pravilna, ampak so notri smeti iz RAM-a. Confused Nič jasno.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile


Nazadnje urejal/a aly Tor Okt 30, 2007 5:23 pm; skupaj popravljeno 2 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.51

PrispevekObjavljeno: Tor Okt 30, 2007 5:11 pm    Naslov sporočila:   Odgovori s citatom

Za stringe imas strlen().
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.61
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Okt 30, 2007 5:32 pm    Naslov sporočila:   Odgovori s citatom

Evo, če hočem zapisati cel buffer v datoteko, je treba kos za kosom. Celega array-a naenkrat žal ne zna.
Tole pa deluje:
Koda:
  dolzina_zapisa := Length (MeritevREF);
  for i := 0 to dolzina_zapisa-1 do
    BlockWrite(BinFileSave, MeritevREF[i], SizeOf(MeritevREF));

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.16
Kraj: Ljubljana

PrispevekObjavljeno: Tor Okt 30, 2007 6:48 pm    Naslov sporočila:   Odgovori s citatom

Ojoj... pa saj vi živite še vedno v času DOSa???
Pozabite na stare čase že enkrat no...

Probajte nakeko takole:
Prva procedura shrani vrednost variable 's' druga pa jo ponovno naloži!
Nadzor teksta pa imamo v Edit1.
Koda:

var
  s: ShortString;
  FileName : string = 'c:\test.txt';

procedure TForm1.Button6Click(Sender: TObject);
//Shrani variablo v 's' iz Edit1.text nato pa v datoteko FileName
var
  FileHandle: Integer;
begin
  if FileExists(FileName) then
  begin
    if MessageDlg('File '+ FileName+ ' Exist,  REWRITE ?',
      mtConfirmation, [mbYes, mbNo], 0) = mrNo then
      exit;
  end;
  s := Edit1.Text;
  FileHandle := FileCreate(FileName);
  FileWrite(FileHandle, s[0], Length(s) + 1);  //shranimo celoten string !!!
  FileClose(FileHandle);
end;

procedure TForm1.Button7Click(Sender: TObject);
//Naloži variablo v 's' iz  datoteke FileName in ga vrže v Edit1.text 
var
  Size,
  FileHandle: Integer;
begin
  FileHandle := FileOpen(FileName, fmOpenRead);
  if FileHandle < 0 then
  begin
//naredi nekaj ali nič ker je prišlo do napake
    exit;
  end else
  begin
    Size := GetFileSize(FileHandle, nil);
    FileRead(FileHandle, s, Size);       //preberemo celoten string
    FileClose(FileHandle);
    Edit1.Text := s;
  end;
end;


Za skakanje po 'File-ju' pa rabiš še FileSeek funkcijo...
Pri Array-ih je podobno. SizeOf(MojArray) vrne dolžino Array-a.

LP GJ
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14677
Aktiv.: 61.80

PrispevekObjavljeno: Tor Okt 30, 2007 8:39 pm    Naslov sporočila:   Odgovori s citatom

Citiram:
Ojoj... pa saj vi živite še vedno v času DOSa???


He, he...

Recimo tale tvoja procedura mi osebno deluje čisto domače. FOpen,FWrite,Fseek,Fclose je za binarni dostop do datoteke poznal Clipper že pred 20-timi leti. Procedura v Dosovih časih bi bila napisana skoraj popolnoma enako. Proceduro "BlockWrite" katero je uporabil Aly pa ne poznam. Sem mislil, da je to novejše Wink....

_________________
lp
Silvo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2, 3, 4, 5  Naslednja
Stran 3 od 5

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 7 dni


Powered by phpBB © 2001, 2005 phpBB Group