kayıt deseni

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

kayıt deseni

Mesaj gönderen rapsodim »

projde fatura ve kalemlerinin txt dosyasına donusturulmesı var.bır fatura bırden fazla kalem içerir.şöyle ki ;
tarih fatura no referans miktar tutar s.no
20040101 360 1500a 50 2350 1
20040101 360 1505b 10 2500 2
20040101 363 1450k 60 3500 1
20040102 364 1300b 10 8350 1
20040102 364 1200a 20 7350 2
20040102 364 1100z 50 350 3

şekinde table mevcut.yapmak istediğim bunu txt ye kaydetmek ve sonucu

200401013601500a5023501
200401013601505b1025002
3642 (fatura ve sıra numarasını yazdırmak)
200401013631450k6035001
3631
200401023641300b1083501
200401023641200a2073502
200401023641100z503503
3643

yazdığım prg tum table alanlarını kayıt edıyor.fatura numarası 360 olanı al ve yukarıdakı ılk blok gıbı yaz daha sonra fatura numarası 363 olanları al ve yaz şeklinde yapmak istiyorum ve kodu;
var
textdosya:textfile;
i,sayac:integer;
satir:string;
sirano,fson,fdetay,fkdv,ftutar,fno,ftarih,fbaslik,tar,fkod,transfer:string;
kl,onu,aktif,faturanumara:integer;
begin
sayac:=0;
satir:='';
assignfile(textdosya,'c:\ismail.txt');
rewrite(textdosya);
tar:=formatdatetime('yyyymmdd',now);
writeln(textdosya,tar);
kl:=table2.fieldbyname('faturano').asinteger;
WRITE(TEXTDOSYA,FKOD);
ftarih:=table2.fieldbyname('faturatarih').asstring;
write(textdosya,ftarih);
fno:=table2.fieldbyname('faturano').asstring;
write(textdosya,fno);
ftutar:=table2.fieldbyname('ftoplamtutar').asstring;
write(textdosya,ftutar);
fkdv:=table2.fieldbyname('ftoplamkdv').asstring;
writeln(textdosya,fkdv);

table2.first;
onu:=strtoint(table2.fieldbyname('sno').asstring);
while not table2.eof do
begin
satir:='3';
table2.prior;
onu:=strtoint(table2.fieldbyname('faturano').asstring);
table2.next;
aktif:=strtoint(table2.fieldbyname('faturano').asstring);
if onu=aktif then
for sayac:=0 to table2.fields.count -1 do
begin
fdetay:='3DE';
satir:=fdetay+fkod+table2.fieldbyname('faturatarih').asstring+fno+table2.fieldbyname('referans').asstring+table2.fieldbyname('birimfiyat').asstring+table2.fieldbyname('miktar').asstring+table2.fieldbyname('tutar').asstring+table2.fieldbyname('kdv').asstring+table2.fieldbyname('sno').asstring;
end;
table2.next;
writeln(textdosya,satir);
end;

closefile(textdosya);

end;
şeklinde yazdım.kontol yaptırıp farklı fatura numarası geldiginde yukarıda yazıdıgım şekle getiremedim.daha sonra tableda diğer fatura alnına inmeli ttxt ye yazma kodunu bana siz yollamıştınız.şu an işin içinden çıkamıyorum yardımınız için tşkr ederim.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Anlayamadım ama Anladığım kadarıyla bloklara ayırmak istiyorsunuz yanlışım varsa lütfen düzeltin.

[quote="rapsodim"]projde fatura ve kalemlerinin txt dosyasına donusturulmesı var.bır fatura bırden fazla kalem içerir.şöyle ki ;
tarih fatura no referans miktar tutar s.no
20040101 360 1500a 50 2350 1
20040101 360 1505b 10 2500 2
20040101 363 1450k 60 3500 1
20040102 364 1300b 10 8350 1
20040102 364 1200a 20 7350 2
20040102 364 1100z 50 350 3
[quote]

Tahminim gibi algoritmik hata oluşturuyorsunuz.
:idea: Yapmamız gerekenler
1.Fatura Numaramız koşul teşkil etmelidir.
Ve alandaki veriyi değişkene aktararak işlemeliyiz.

Yani kodlarımıza şunu dedirtmeliyiz. Table yi baştan sona tara Fatura no su 360 olanları bul 360 olanları bulduktan sonra Bir sonraki istenen Fatura No ya bak.

Bunu kodla ifade edersek

Kod: Tümünü seç

Table1.first;
FtNo := Table1.FieldByName('FtNo').AsInteger;
While not Table1.Eof Do
Begin
        if Table1.FieldByName('FtNo').AsInteger = FtNo Then
        Begin
             //Koşul uyuyor işlemleri yap.
             //Bu kayıt numarası bir önceki kayıtla aynıysa bir değişkeni atamadan geç
        End
        Else
        Begin
            //Yeni Blok Oluştur.
            FtNo := Table1.FieldByName('FtNo').AsInteger;
            Continue;
        End;
        Table.Next;
Kodları sallama yazdım sadece algoritmik olarak anlaman için :wink:

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Mesaj gönderen rapsodim »

blokları ayarlayamadım dediğiniz gibi

şu hale getirdim ama else kısmında hata veriyor.yazdığınız formata giydiremedim

begin
sayac:=0;
satir:='';
assignfile(textdosya,'c:\ismail.txt');
rewrite(textdosya);
table1.first;
ftno:=table1.fieldbyname('faturano').asinteger;
while not table1.eof do
begin
if table1.fieldbyname('faturano').asinteger= ftno then
for sayac:=0 to table1.fields.count -1 do
begin
fdetay:='3DE';
satir:=fdetay+fkod+table1.fieldbyname('faturatarih').asstring+fno+table1.fieldbyname('referans').asstring+table1.fieldbyname('birimfiyat').asstring+table1.fieldbyname('miktar').asstring+table1.fieldbyname('tutar').asstring+table1.fieldbyname('kdv').asstring+table1.fieldbyname('sno').asstring;
end;
writeln(textdosya,satir);
end;
end
else
begin
for sayac:=0 to table1.fields.count -1 do
begin
fdetay:='3DE';
satir:=fdetay+fkod+table1.fieldbyname('faturatarih').asstring+fno+table1.fieldbyname('referans').asstring+table1.fieldbyname('birimfiyat').asstring+table1.fieldbyname('miktar').asstring+table1.fieldbyname('tutar').asstring+table1.fieldbyname('kdv').asstring+table1.fieldbyname('sno').asstring;
end;
writeln(textdosya,satir);
continue;
table1.next;
end;
closefile(textdosya);
end;
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Kod: Tümünü seç

begin
sayac:=0;
satir:='';
          assignfile(textdosya,'c:\ismail.txt');
          rewrite(textdosya);
table1.first;
ftno:=table1.fieldbyname('faturano').asinteger;
while not table1.eof do
       begin
       if table1.fieldbyname('faturano').asinteger= ftno then
           for sayac:=0 to table1.fields.count -1 do
               begin
                 fdetay:='3DE';
                 satir:=fdetay+fkod+table1.fieldbyname('faturatarih').asstring+fno+table1.fieldbyname('referans').asstring+table1.fieldbyname('birimfiyat').asstring+table1.fieldbyname('miktar').asstring+table1.fieldbyname('tutar').asstring+table1.fieldbyname('kdv').asstring+table1.fieldbyname('sno').asstring;
                 end;
               writeln(textdosya,satir);
              end;
        end
        else
        begin
         for sayac:=0 to table1.fields.count -1 do
                begin
                 fdetay:='3DE';
                 satir:=fdetay+fkod+table1.fieldbyname('faturatarih').asstring+fno+table1.fieldbyname('referans').asstring+table1.fieldbyname('birimfiyat').asstring+table1.fieldbyname('miktar').asstring+table1.fieldbyname('tutar').asstring+table1.fieldbyname('kdv').asstring+table1.fieldbyname('sno').asstring;
                 end;
                    writeln(textdosya,satir);
                    continue;
                    table1.next;
             end;
   closefile(textdosya);
       end;
Pardon for döngüsüne niye ihtiyaç duydunuz? Ayrıca Else kısmında tekrar atamalar yapıyorsunuz sebebi nedir?

Son olarakta kodlarınızı [C o D e] kısmı içine alırsanız okumamız kolay olacak. :wink:

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Mesaj gönderen rapsodim »

for dongus ugereksız mı?table alnalarını uygun kosulu sagladıgı surece yazdırmak ıcın boyle yaptım yanlıslık var ama cozemedım duzenlememe yardımcı olursanız sevınırım ılgınıze teşekkür ederim
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Bence For döngüsü gereksiz. Ayrıca atamaları Koşul altında yapın Else kısmındaki Atamaları ve For döngüsünü kaldırın.

Kolay gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Mesaj gönderen rapsodim »

kusura bakmayın kafam ıyıce karıstı gonderdıgım kod uzerınde nasıl olacak dedıgınız yaptım basaramadım.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

O zaman biraz dinlenin tekrar görüşelim :P :D

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Mesaj gönderen rapsodim »

bir haftadır dinleniyorum.ilgili kod diziliminden hangi alanları çıkartmam gerekiyor.bu aşamayı geçebilsem sorun kalmayacak ve sizi rahatsız etmiyeceğim.ifade ettikleriniz nasıl uygularım.bilmediğim bu konuda yardım ve ugraşlarınız için teşekkür ederim.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Kod: Tümünü seç

begin 
sayac:=0; 
satir:=''; 
          assignfile(textdosya,'c:\ismail.txt'); 
          rewrite(textdosya); 
table1.first; 
ftno:=table1.fieldbyname('faturano').asinteger; 
while not table1.eof do 
       begin 
       if table1.fieldbyname('faturano').asinteger= ftno then 
       begin 
                 fdetay:='3DE'; 
                 satir:=fdetay+fkod+table1.fieldbyname('faturatarih').asstring+fno+table1.fieldbyname('referans').asstring+table1.fieldbyname('birimfiyat').asstring+table1.fieldbyname('miktar').asstring+table1.fieldbyname('tutar').asstring+table1.fieldbyname('kdv').asstring+table1.fieldbyname('sno').asstring; 
                 end; 
               writeln(textdosya,satir); 
              end; 
        end 
        else 
        begin 
               Satir:= 'Blok Sonu';
               writeln(textdosya,satir); 
               ftno:=table1.fieldbyname('faturano').asinteger; 
               continue; 
        end; 
               table1.next; 
   closefile(textdosya); 
       end;
Ben düzenledim bu şekilde deneyin olmazsa zip leyip mail atın bana.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Mesaj gönderen rapsodim »

ama hata verdi kod aynen şöyle;
procedure TForm1.Button1Click(Sender: TObject);
var
textdosya:textfile;

satir:string;
ftno:integer;
begin

satir:='';
assignfile(textdosya,'c:\ismail.txt');
rewrite(textdosya);
table1.first;
ftno:=table1.fieldbyname('faturano').asinteger;
while not table1.eof do
begin
if table1.fieldbyname('faturano').asinteger= ftno then
begin

satir:=table1.fieldbyname('faturatarih').asstring+table1.fieldbyname('referans').asstring+table1.fieldbyname('birimfiyat').asstring+table1.fieldbyname('miktar').asstring+table1.fieldbyname('tutar').asstring+table1.fieldbyname('kdv').asstring+table1.fieldbyname('sno').asstring;
end;
writeln(textdosya,satir);
end;
end
else
begin
Satir:= 'Blok Sonu';
writeln(textdosya,satir);
ftno:=table1.fieldbyname('faturano').asinteger;
continue;
end;
table1.next;
closefile(textdosya);
end;
end.

';' excepted bu else found şeklinde hata veriyor. eksik veya yanlış bir şey mi var acaba.mail adresinize table ve kodları yolluyorum.ilginiz için teşekkür ederim.saygılarımla.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
    textdosya:textfile;
    satir, eFtTar, eFtSNo:string;
    ftno:integer;
begin
    satir:='';
    assignfile(textdosya,'c:\ismail.txt');
    rewrite(textdosya);
    table1.first;
    ftno:=table1.fieldbyname('faturano').asinteger;
    while not table1.eof do
    begin
        if ftno = table1.fieldbyname('faturano').asinteger then
        begin
            satir:=table1.fieldbyname('faturatarih').asstring + table1.fieldbyname('referans').asstring + table1.fieldbyname('birimfiyat').asstring+table1.fieldbyname('miktar').asstring+table1.fieldbyname('tutar').asstring+table1.fieldbyname('kdv').asstring + table1.fieldbyname('sno').asstring;
            writeln(textdosya, satir);
            eFtTar := table1.fieldbyname('faturatarih').asstring;
            eFtSNo := table1.fieldbyname('sno').asstring;
        end
        else
        begin
            Satir := '';
            Satir:= eFtTar + eFtSNo;
            writeln(textdosya,satir);
            ftno:=table1.fieldbyname('faturano').asinteger;
            Satir := '';
            continue;
         end;
            table1.next;
    End;
    Satir := '';
    Satir:= eFtTar + eFtSNo;
    writeln(textdosya,satir);
    Satir := '';
    closefile(textdosya);
end;
Kopyala Yapıştır Yapabilirsin.
Çıktın ise aynen şu şekilde olacaktır.
200401070041309616E0000000061206000000020000000001224120000000022034160001
200401070041639081E0000002161377000000003000000006484131000000116714358002
200401070041639101E0000001892529000000003000000005677587000000102196566003
200401070041639160E0000000139680000000005000000000698400000000012571200004
200401070041705390E0000000178791000000003000000000536373000000009654714005
200401070042894908E0000002887258000000006800000019633354400000353400379006
200401070075815450E0000000293022000000003480000001019716560000018354898007
200401070076764010E0000000829518000000001600000001327228800000023890118008
200401070134146910E0000000278165000000007500000002086237500000037552275009
200401070850127980E0000000515370000000005000000002576850000000046383300010
200401070988055621E0000001395444000000006750000009419247000000169546446011
200401070988055641E0000001479134000000006000000008874804000000159746472012
200401070988064940E0000000598783000000003000000001796349000000032334282013
200401070988064960E0000000387775000000007000000002714425000000048859650014
200401070988064970E0000000224129000000004130000000925652770000016661750015
20040107015
200401080988064970E0000000224129000000003000000008874804000000159746472001
20040108001
200401080850127980E0000001395444000000006750000009419247000000032334282001
200401080988064970E0000000224129000000004130000002714425000000016661750002
20040108002
Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Arifceylan28
Üye
Mesajlar: 298
Kayıt: 19 Tem 2004 01:45
Konum: Giresun/Samsun

Mesaj gönderen Arifceylan28 »

Helal sana husonet abi çok yardımseversin.üşenmemiş yazmışsın.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Estağfurullah. :oops:

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
rapsodim
Üye
Mesajlar: 147
Kayıt: 15 Eki 2003 03:52

Mesaj gönderen rapsodim »

ilginiz ve bana ayırdığınız zaman için teşekkür ederim.programın ilerleyen aşamalarda takılırsam yardımınızı bekliyorum.çok teşekkür ederim.
Cevapla