String ifadeler üzerinde yapılabilecekler

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

String ifadeler üzerinde yapılabilecekler

Mesaj gönderen sailor »

Merhaba arkadaşlar,
Sormak istediğim soru, 2 gün önce sorduğum sorunun devamı sayılır aslında.
Aşağıdaki kodda label1'de örneğin 'CCDDABC2' gibi bir hex sayı olduğunu düşünelim.ofenX arkadaşımın 2 gün önce verdiği bu kod örneğini tek başına uyguladım. Sorun yok.

Kod: Tümünü seç

Procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i:integer;
DEGER:ARRAY [1..8] OF STRING[8];
begin
       s:='ACBDEB43';
       FOR I:=1 TO 8 DO
         BEGIN      DEGER[I]:=COPY('00000000',1,I-1)+S[I]+COPY('00000000',I,8-I);
              SHOWMESSAGE (DEGER[I]);
             END;
        end; 
Fakat bu kodu aşağıda kendi kodumda kullandığımda;
örneğin 1.karakteri aldıktan sonra Label1'de 0CDDABC2 kalmasını nasıl sağlarım.(Aslında CCDDABC2-C0000000 işlemi gibi.string üzerinde böyle bir çıkarma işlemi mümkün müdür?)Sırasıyla diğer karakterleri tek tek aldıkça da bu string (CCDDABC2) önündeki sıfırlar artacak.Aslında yapmak istediğim;sonuçta edit2'de de; yapılan bir dizi işlemden sonra,label1'deki hex karakterlere karşılık 8 basamaktan oluşan ascii karakterlerin olması.Kusura bakmayın kodlarda,kendi yazdığım kısımlarda optimizasyonla pek ilgilenemedim.Şimdiden teşekkürler arkadaşlar.Kolay gelsin.

Kod: Tümünü seç

procedure TForm1.Edit1Change(Sender: TObject);
var
s,a,c,d,i,l,e:integer;
b,n,k,h,m:string;
begin
 s:=0;
 d:=0;
 for a:=1 to length(edit1.Text) do
 begin
 s:=s+ord(edit1.text[a]);
 s:=s-$57;
 s:=s and $0F;
 c:=$20-a*4;
 s:=s shl c;
 d:=d+s;
 end;
 b:=inttohex(d,8);
 label1.Caption:=b;
 c:=0;
 h:='';
 for i:=1 to 8 do
            begin
            c:=32-i*4;
            k:='00000000';
            n:=copy(k,1,i-1)+b[i]+copy(k,i,8-i);
            e:=hextoint(b);
            e:=e-hextoint(n);
            l:=hextoint(n);
            l:=l shr c;
            l:=l and $1F;
            l:=l-$20;
            l:=l+$57;
            m:=chr(l);
            m:=h+m;
            end;
            edit2.Text:=m;
 end;
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

Mesaj gönderen sailor »

Kusura bakmayın arkadaşlar.Yine aynı hatayı yaptım,bir şeyi yazmayı unuttum.Her ikisinide de yorgunluğuma ve gecenin geç bir saati olmasına verin lütfen.Yazmayı unuttuklarım;bu kodlarda kullandığım bu kod parçası.Ayrıca kodları derleyip çalıştırdığımda label1'de 8 basamaklı hex karakterler olmasına rağmen,edit2'de daima tek basamaktan oluşan bir ascii karakter oluyor.Kolay gelsin arkadaşlar.Hoşçakalın.

Kod: Tümünü seç

function tform1.HexToInt(HexStr: String): Integer;
begin
  result := StrToInt('$' + HexStr);
end;
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

Mesaj gönderen sailor »

Arkadaşlar sorumun cevabını bilen varsa lütfen cevap yazabilir mi?İnanın yardıma çok ihtiyacım var.Takılıp kaldım bir noktadan sonra.Lütfen arkadaşlar yardımlarınızı esirgemeyin.Hoşçakalın,kolay gelsin.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

cevabı yazmışsınız, editteki stringi önce kontrol edin gerçekten tüm basamaklar hexmi, sonra döngü ile integera çevirip çıkartın sonra tekrar integera çevirin. sanırım kimse size baştan sona bir fonksiyon yazamaz, siz başlayın takıldığınız yerde kodunuzu gönderin yardım eden çıkar.
bu yaptığınız şekilde daha çok yardım bekleyebilirsiniz. :idea:
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
sailor
Üye
Mesajlar: 25
Kayıt: 08 Nis 2005 04:49
Konum: İzmir

Mesaj gönderen sailor »

Sağol mege kardeşim.Ben o yoldan gidiyorum,fakat sen haklısın belki de çabuk pes edip,hemen başkalarından yardım beklemek doğru değil.Yapmak için çalışacağım pes etmek yok kardeşim.Hoşçakalın,kolay gelsin.
Cevapla