mmx 0 Raportează post Postat Mai 12, 2007 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
CeanyB 0 Raportează post Postat Mai 13, 2007 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
radu84 0 Raportează post Postat Mai 14, 2007 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
mmx 0 Raportează post Postat Mai 14, 2007 (editat) 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 Mai 14, 2007 de mmx Partajează acest post Link spre post Distribuie pe alte site-uri
radu84 0 Raportează post Postat Mai 15, 2007 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
argv 5 Raportează post Postat Mai 15, 2007 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
mmx 0 Raportează post Postat Mai 15, 2007 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. Partajează acest post Link spre post Distribuie pe alte site-uri
radu84 0 Raportează post Postat Mai 16, 2007 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
mmx 0 Raportează post Postat Mai 16, 2007 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
radu84 0 Raportează post Postat Mai 16, 2007 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