Sari la conținut
Forum Roportal
mmx

explicare delphi pentru inceptor

Evaluează acest topic

Postări Recomandate

Buna, am si eu nevoie de cateva sfaturi mai explicite daca se poate

Deci....vreai sa fac un soft care deschide un fisier il transforma in hex si returneaza anumite valori de la anumita adresa, ex:

adr 0 1 2 3 4 5 6 7 8 9 A B C D E F

0000 A1

0001

0002

0003 C2

......

000A

Deci sa zicem ca acesta e fisierul deja transformat in hex si eu am nevoie de valoarea de la adresa 00032 care este C2, sau C si 2.

Astea am reusit sa fac...DAR.... trebuie sa mai simpific codul, pentru a adauga mai multe conditii

procedure tform1.test;
type
TFileStructure = Array[0..15] of Byte;
var
 fname:string;
 F: File of TFileStructure;
 Data: Array of TFileStructure;
 FSize, I: Integer;
 x,y,z,w,ctr1,stat:byte;
 a,b,c,d,ctr2,ctr1a,ctr1b,status,stats,status2:string;
 a1,b1,c1,d1,a2,b2,c2,d2:string;

begin
if OpenDialog1.Execute then
  begin
 try
   Screen.Cursor := crHourglass;
   fname := ExtractFileName(OpenDialog1.Filename);
   edit1.Text:=fname;
   Application.ProcessMessages;
   try
	 Assignfile(F,(OpenDialog1.Filename));
   except on E:EFOpenError do
   begin
	   MessageDlg(Format('Can''t open file %s.',[fname]),mtError,[mbOk],0);
   end;
   end;
   finally
   Screen.Cursor := crDefault;
   begin
   end;
  Reset(F);
  FSize:=FileSize(F);
  SetLength(Data,FSize);
 For I := 0 to FSize-1 do
   Read(F,Data[I]);
   CloseFile(F);
If FSize =$8 then
 Begin
 stat:=data[$0FE,15];
 ctr1:=data[$0FE,14];
 x:=data[$05,9];
 y:=data[$05,10];
 z:=data[$05,11];
 w:=data[$05,12];
 ctr2:=bytetohex(ctr1);
 stats:=bytetohex(stat);
 a:=bytetohex(x);
 b:=bytetohex(y);
 c:=bytetohex(z);
 d:=bytetohex(w);
 status:=inttohex(stat shr 4,1);
 ctr1a:=inttohex(ctr1 shr 4,1);
 ctr1b:=inttostr(ctr1 shr 15);
 a1:=inttohex(x shr 4,1);
 a2:=inttohex(x and 15,1);
 b1:=inttohex(y shr 4,1);
 b2:=inttohex(y and 15,1);
 c1:=inttohex(z shr 4,1);
 c2:=inttohex(z and 15,1);
 d1:=inttohex(w shr 4,1);
 d2:=inttohex(w and 15,1);
 if status=('1') then status2:=('Enabled') ;
 if status=('2') then status2:=('Disabled');
Memo1.Text:=('');
Memo1.lines.add('Found................24C01(128 byte)');
sleep(300);
Memo1.lines.add('Radio type......................Unknown');
sleep(300);
Memo1.lines.add('Counter status................Unknown');
Sleep(300);
Memo1.lines.add('Code status ...................Unknown');
sleep(300);
Memo1.lines.add('Code OK ..............................'+ a2+b1+c2+d1);
 end;

deci conditile ar fi (if fsize=$:P

dar eu trebuie sa mai adaug inca cateva conditii care sa depinda una de alta(daca A=1 si b=3 si d=\=20 atunci sa ruleze ce urmeaza.) apoi sa scriu alt sir de conditii care sa returneza alte valori de la alte adrese ori de la acel fisier sau de la altul , cum as putea rezolva??

Sper ca am explicat cat de cat pe intelesul tuturor problema mea.

VA multumesc!

Partajează acest post


Link spre post
Distribuie pe alte site-uri

nu ma prea pricep eu foarte bine....am facut doar 3 ani de pascal...

si in delphi sunt mult mai incepator ca tine....

 

dar daca "sa depinda una de alta" inseamna sa fie satisfacute toate simultan....

atunci incearca sa le introduci cu "and" tot acolo la if fsize.......

 

si din cate stiu eu...nu trebuie sa mai scrii inka o data codul pt alte valori, sau pt alt fisier...

ci doar sa pui toti pasii necesari intr-un repeat corespunzator,

 

...SAU...eventual, daca tot faci afisarea intr-un formular....

ai un buton de la care resetezi afisarea din memo...

mai ai un editbox in care introduci adresa cautata,

si eventual inka un buton "afisare" care activeaza "calculul" si ...mai bine zis,

afisarea, [ca doar actiunea asta e vizibila] in memo...

 

si deci dupa o faza...resetezi afisarea, bagi alta adresa in editbox, si la apasarea butonului "afisare" ...

se va afisa in memo valoarea gasita pt noua adresa cautata....

{asta implica sa muti tot codul in handlerul clickbutton al lui "afisare" !! }

pt sa cauti in alt fisier...deocamdata nu am idee....

 

asteapta si pareri mai experimentate....

...multa bafta...

 

numai bine...

Partajează acest post


Link spre post
Distribuie pe alte site-uri

posteaza tot codul, inclusiv de unde e functia aia bytetohex. eu nu sunt 100% ca am inteles. deci ai vectorul ala cu date hexa in el(data) si zica ca daca lungimea fisierului e 8(If FSize =$8 then) atunci tot atribui acolo ceva valori.

 

si de aici rexplica-mi te rog ce vrei sa faci ca nu am inteles.

 

numa bine,

Partajează acest post


Link spre post
Distribuie pe alte site-uri
posteaza tot codul, inclusiv de unde e functia aia bytetohex. eu nu sunt 100% ca am inteles. deci ai vectorul ala cu date hexa in el(data) si zica ca daca lungimea fisierului e 8(If FSize =$8 then) atunci tot atribui acolo ceva valori.

 

si de aici rexplica-mi te rog ce vrei sa faci ca nu am inteles.

 

numa bine,

Deci aici este functia:

Function ByteToHex(Value: Byte): String;
var
 Portion: Byte;
Begin
 //Lower 4 bits
 Portion:=Value And 15;
 If Portion>9 then
Result:=Char(Portion+55)
 Else
Result:=Char(Portion+48);
 //Higher 4 bits
 Portion:=(Value And 240) SHR 4;
 If Portion>9 then
Result:=Char(Portion+55)+Result
 Else
Result:=Char(Portion+48)+Result;
End;

Deci, eu iau un fisier *.bin, si trebuie sa returnez anumite valori de la anumite adrese.

Ex:

stat:=data[$0FE,15];

: stat este valoarea de la adresa 0FE, al 15byte, dupa ce l-am convertit in hex

 stats:=bytetohex(stat);

sa zicem ca este"1A"

Dar s-ar putea ca eu am nevoie numai de "1" sau numai de "A".... si atunci il despart cu urmatoarea

status:=inttohex(stat shr 4,1);

returneaza"1"

sau

 status:=inttohex(stat and 15,1);

returneaza "A".

Deci daca fisierul =$8 atunci trebuie sa returneze valorile ce au fost scrise mai sus, daca fisierul=$100 va trebui sa returneze alte valori de la alte adrese si asa mai departe.....si vor mai fi cazuri ca de exemplu : daca fisierul=8 si (o serie de alte conditi) sa returneze alte valori.

Sper ca am fost destul de explicit.

Poate ca m-am complicat dar sunt incepator in delphi si atata stiu.

Multumesc pt ajutor!

Editat de mmx

Partajează acest post


Link spre post
Distribuie pe alte site-uri

ok, si eu sunt entry level, asa ca stai linistit. ceea ce vrei tu e destul de complicat, de vreo 2 ori a trebuit sa iau totul de la cap ca m-ai bagat in ceata. din ce spui tu, numai daca nu faci pentru fiecare conditie cod. sau sa te gandesti la un interpretor, care o sa interpreteze linia de tine si sa faca ceea ce vrei.

adica, gandesti cum o sa iti arate codul care il dai la interpretare. de ex $8 atunci sa faca ceva. ideea e ca sa gandesti de la cazul cel mai simplu la cel mai complex, si mai ales cel complex sa fie in continuarea celui simplu. sa se construiasca pe el

Partajează acest post


Link spre post
Distribuie pe alte site-uri

Nu inteleg, valorile pe care trebuie sa le returneze sunt din fisierul original sau din cel convertit? Cand spui 'adrese' te referi la offset in fisier? Nu ar fi mai simplu sa faci un fseek si sa convertesti doar valorile care te intereseaza?

Partajează acest post


Link spre post
Distribuie pe alte site-uri
Nu inteleg, valorile pe care trebuie sa le returneze sunt din fisierul original sau din cel convertit? Cand spui 'adrese' te referi la offset in fisier? Nu ar fi mai simplu sa faci un fseek si sa convertesti doar valorile care te intereseaza?

Deci este imagine atasata......este un fisier ***.bin care e afisat in hex.

Eu stiu ca trebuie de la adresa 0040 am nevoie de valoarea a 3-a(numerotarea incepand de la 0) care este D0.

In unele cazuri eu voi avea nevoie de D0 sau de D sau de 0 .

deocamdata cam asta face softul in general.

post-96533-1179246156_thumb.jpg

Partajează acest post


Link spre post
Distribuie pe alte site-uri
Deci este imagine atasata......este un fisier ***.bin care e afisat in hex.

Eu stiu ca trebuie de la adresa 0040 am nevoie de valoarea a 3-a(numerotarea incepand de la 0) care este D0.

In unele cazuri eu voi avea nevoie de D0 sau de D sau de 0 .

deocamdata cam asta face softul in general.

 

pai si cum stabilesti cazurile alea? tu vrei sa faci "browse" printr-un fisier hex? cum stabilesti cazurile alea??

 

numa bine,

Partajează acest post


Link spre post
Distribuie pe alte site-uri
pai si cum stabilesti cazurile alea? tu vrei sa faci "browse" printr-un fisier hex? cum stabilesti cazurile alea??

 

numa bine,

Deci daca fisierul are 256bytes atunci stiu ca trebuie sa returnez valoarea de la $10A si $10B, daca fisierul are 512bytes atunci trebuie sa returnez valoarea de la $011 si $012....si asa mai departe. Dar vor fi cazuri in care tot din fisier de 512bytes(dar diferit de ce anterior) dar trebuie sa returnez alta valoare, si atunci fac alta conditie : ca daca fisierul are 512 si (valori returnate de la alte adrese care e aceeasi pt fiecare fisier de 512 pe care lucrez).

deci aceste fisiere sunt dumpuri de memorii eeprom din diferite casetofoane auto cu cod.Si pentru a-mi face viata mai simpla vreau sa scriu un program in care introduc dumpul si il identifica si returneaza codul. De aceea eu am nevoie sa lucrez cu el in hex.

Partajează acest post


Link spre post
Distribuie pe alte site-uri
Deci daca fisierul are 256bytes atunci stiu ca trebuie sa returnez valoarea de la $10A si $10B, daca fisierul are 512bytes atunci trebuie sa returnez valoarea de la $011 si $012....si asa mai departe. Dar vor fi cazuri in care tot din fisier de 512bytes(dar diferit de ce anterior) dar trebuie sa returnez alta valoare, si atunci fac alta conditie : ca daca fisierul are 512 si (valori returnate de la alte adrese care e aceeasi pt fiecare fisier de 512 pe care lucrez).

deci aceste fisiere sunt dumpuri de memorii eeprom din diferite casetofoane auto cu cod.Si pentru a-mi face viata mai simpla vreau sa scriu un program in care introduc dumpul si il identifica si returneaza codul. De aceea eu am nevoie sa lucrez cu el in hex.

 

din ce imi spui nu prea vad vreo metoda in afara de a lua fiecare tip de casetofon in parte si sa-l tratezi in cod.

 

c1-casetofon1: adresa x

c2-casetofon2: adresa y

c3-casetofon3: adresa z

 

si asa mai departe.

din moment ce c1 nu are nici o parte comuna in hex-ul ala cu c2 sau c3 nu vad altfel cum sa faci ceva general. cred ca trebuie sa iei caz cu caz. nu stiu daca reusesti sa proiectezi un soft care sa "invete" pe parcurs chestia asta(ceva de genul inteligenta artificiala sau sisteme expert).

 

numa bine,

Partajează acest post


Link spre post
Distribuie pe alte site-uri

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum

×