txt dosyadan veri alıp yazdırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

arkadaşlar delphi de yeniyim ve basit bir program yazmam lazım yardımlarınıza ihtiyacım var
bilgisayarın c diskinde bulunan bir txt. dosyasından bilgi alıp bu bilgileri yazdırma alanına atıp yazdırmam gerekiyor örnekle açıklamam gerekir ise

txt dosyasında veriler şu şekilde
ürün adı adet ağırlık sipariş no vs vs
plastik 12 125 12345 vs vs
metal 15 155 12333 vs vs
.
.
.

diye devam ediyor
benim isteğim şu şekilde burdaki bilgilerden işime yarayanları alıp çıktı almak için kullanacağım antet bir alanın belirli yerlerine yazdırma
yani şu şekile çevirmek istiyorum

KAGA OTOMASYON SANAYİ VE TİC A.Ş
ÜRÜN ADI:Plastik
AĞIRLIK:125
ADET:12
SİPARİŞ NO:

2. satırdaki bilgilerde yine aynı bu formda başka sayfa olarak çıkacak öyle devam edecek
yardımlarınız için teşekkür ederim
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

arkadaşlar bir şey yaptım ama çok amatörce oldu
Resim

Uploaded with ImageShack.us

ve bu sadece ilk satırdaki bilgileri alıp bu formu oluşturuyor diğer satırları nasıl yapabilirim?
birde yazıcıya gönderme kodları nasıl arkadaşlar?
kodları şöyle yazdım


unit okumt;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Memo3: TMemo;
Label3: TLabel;
Label4: TLabel;
Memo4: TMemo;
Memo5: TMemo;
Label5: TLabel;
Label6: TLabel;
Memo6: TMemo;
Memo7: TMemo;
Memo8: TMemo;
Memo9: TMemo;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Memo10: TMemo;
Memo11: TMemo;
Label10: TLabel;
Label11: TLabel;
Memo12: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer ;
begin
Memo1.Lines.LoadFromFile( 'c:\DATAM.txt' );

for i:= 0 to Memo1.Lines.Count - 1 do
begin
Memo2.Lines.Add( Copy( Memo1.Lines , 1 , (6 - 1) ) );
Memo3.Lines.Add( Copy( Memo1.Lines , 6 , (46 - 6) ) );
Memo4.Lines.Add( Copy( Memo1.Lines , 57 , (74 - 57) ) );
Memo5.Lines.Add( Copy( Memo1.Lines , 48 , (55 - 48) ) );
Memo6.Lines.Add( Copy( Memo1.Lines , 75 , (89 - 75) ) );
Memo7.Lines.Add( Copy( Memo1.Lines , 90 , (93 - 90) ) );
Memo8.Lines.Add( Copy( Memo1.Lines , 94 , (97 - 94) ) );
Memo9.Lines.Add( Copy( Memo1.Lines , 98 , (101 - 98) ) );
Memo10.Lines.Add( Copy( Memo1.Lines , 134 , (136 - 134) ) );
Memo11.Lines.Add( Copy( Memo1.Lines , 128 , (132 - 128) ) );
Memo12.Lines.Add( Copy( Memo1.Lines[i] , 144 , (147 - 144) ) );
end;


end;


end.
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

arkadaşlar forumda bu kadar çok delphi uzmanı varken
neden hala hiç cevap gelmedi şaşırtıyor beni, yardımlarınızı bekliyorum
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

arkadaşlar merhaba
tam anlamıyla yapmak istediğimi yapan bir program buldum ama exe si var elimde kodlarını bilemiyorum tabii
program şu şekilde çalışıyor
başka bir programın oluşturduğu txt dosyasından kendi işine yaraya karaktarleri alıp kendi programın bulunduğu klasör içine atılmış olan txt şablon dosyasına yazıp onun üzerinden çıktı alıyor
tam benim istediğim olay yani

şablon olarak kullandığı txt içeriği şu şekilde:


@70(0020)@71(0030)@61(1800)@62(0000)MÜSTERI ADI
@61(0350)@70(0020)@71(0030)@62(0010): @03

@70(0020)@71(0030)@61(1800)@62(0000)ÜRÜN ADI
@61(0350)@70(0020)@71(0030)@62(0010): @11

@70(0015)@71(0030)@61(1800)@62(0000)EBAT
@61(0350)@70(0015)@71(0030)@62(0010): @15 x @30

@70(0017)@71(0025)@61(1800)@62(0000)RIL DEGERLERI
@61(0350)@70(0017)@71(0025)@62(0010): @20

@70(0015)@71(0030)@61(1800)@62(0000)DALGA
@61(0350)@70(0015)@71(0030)@62(0010): @09

@70(0015)@71(0030)@61(1800)@62(0000)FIRMA ÜRÜN/SIP.REF.
@61(0350)@70(0015)@71(0030)@62(0010): @07

@70(0017)@71(0030)@61(1800)@62(0000)SIPARIS NO
@61(0350)@70(0017)@71(0030)@62(0010): @05

@70(0017)@71(0030)@61(1800)@62(0000)SIPARIS ADETI
@61(0350)@70(0017)@71(0030)@62(0010): @31

@70(0017)@71(0030)@61(1800)@62(0000)PALETTEKI ADET
@61(0350)@70(0017)@71(0030)@62(0010): @21

@70(0010)@71(0030)Isıdan,Nemden ,Kokudan uzak muhafaza ediniz.


bu txt üzerinden çıktı alıyor
anladığım kadarıyla örnek verecek olursak en baştaki müşteri adı satırının ilk başındaki karakterler yazı tipi boyutu ve konumunu içeriyor
onun altındaki satırdada programın gönderdiği bilginin yazıldığı yer (@03) var ve onun yazı tipi boyutu vs.

yazıcıdan çıkan kağıt aşağıdaki gibi
müşteri adı:kaga otomasyon
ürün adı :otomat
ebat:12x14

burda : dan sonraki kısımlar diğer programın txt dosyasına attığı bilgiye göre değişiyor

yardımlarınızı bekliyorum
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

arkadaş bu nasıl bir forumdur anlamadım
kendim çalıp kendim oynuyorum
çok mu zor bir soru sordum onu bari söyleyinde ona göre vazgeçiyim
yada hiç mi uzman yok forumdA
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen conari »

araştırmadan sorulan sorulara cevap fazla verilmiyor. Yukarıdaki kodunda bu işi yapmışsınız. Bu döngü sonucu aslında bütün kayıtları aktarıyor. ama döngü olduğu için, sonuna kadar gidiyor sizede ilk kayıtmışl gibi geliyor. döngüyü iptal edin. Memo1.Lines
"i" için her seferinde bir sayı belirtin. tabii hangi kayıdı basmak istediğinizi görmek için bunları listelemelisiniz.ve oradan seçmelisiniz. Listview kullanın.

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer ;
begin
Memo1.Lines.LoadFromFile( 'c:\DATAM.txt' );

for i:= 0 to Memo1.Lines.Count - 1 do
begin
Memo2.Lines.Add( Copy( Memo1.Lines , 1 , (6 - 1) ) );
Memo3.Lines.Add( Copy( Memo1.Lines , 6 , (46 - 6) ) );
Memo4.Lines.Add( Copy( Memo1.Lines , 57 , (74 - 57) ) );
Memo5.Lines.Add( Copy( Memo1.Lines , 48 , (55 - 48) ) );
Memo6.Lines.Add( Copy( Memo1.Lines , 75 , (89 - 75) ) );
Memo7.Lines.Add( Copy( Memo1.Lines , 90 , (93 - 90) ) );
Memo8.Lines.Add( Copy( Memo1.Lines , 94 , (97 - 94) ) );
Memo9.Lines.Add( Copy( Memo1.Lines , 98 , (101 - 98) ) );
Memo10.Lines.Add( Copy( Memo1.Lines , 134 , (136 - 134) ) );
Memo11.Lines.Add( Copy( Memo1.Lines[i] , 128 , (132 - 128) ) );
Memo12.Lines.Add( Copy( Memo1.Lines[i] , 144 , (147 - 144) ) );
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

hocam Öncelikle Allah razı olsun ilgilendin sorumla,
inanın yerli yabancı ne kadar site varsa araştırdım ama istediğimi tam olarak bulamadım
senin yorumunu deneyeceğim ama benim istediğim tam olarak öyle değil aslında
düşününce okadar basit bir işlem ama kod bilmeyince işin içinden çıkamıyorum
Hocam kısa bir özet geçiyim
başka bir programın oluşturduğu txt dosyasından bilgileri alacağım
her txt satırının belirli karekter aralığındaki bilgileri alıp benim kalıp olarak hazırladığım bir antete atıp çıktı almak istiyorum
bunu yapan başka bir program buldum yukarıdaki mesaj dada anlattım adamın nasıl yaptığını
tıpkı onun yaptığı gibi bir txt kalıbı oluşturup bunun ilgili yerlerini diğer txt dosyadan alıp yazdırmam lazım
ilerlediğimiz yol yanlış gibi dişiniyorum haksızmıyım?
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen dynamo »

ürün bilgi uzunlukları farklı olduğundan

Memo2.Lines.Add( Copy( Memo1.Lines , 1 , (6 - 1) ) );
................

kod yetersiz kalır.Boşluk karakterini Pos komutunda kullanıp ad,adet ayırmak lazım.

Yarın bir örnek hazırlarım....
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen dynamo »

text dosyanın içeriğini f: TextFile; değişkenine alıp döngü ile kontrol ediyoruz.boşluklardan itibaren belli bir sırayla URUNADI,ADET,AGIRLIK,SIPARISNO değerlerini alıyoruz.Bunları bir tabloya doldurup yazdırmak daha kolay olacaktır:

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
var URUNADI,ADET,AGIRLIK,SIPARISNO:string;
   f: TextFile;
   s,dosya,satir,str:string;
   kalan:integer;
begin
   dosya:=appPath+'DATAM.txt';
   AssignFile(f,dosya);
   {$I-}
   Reset(f);
   {$I+}
   if IOResult<>0 then begin
      Application.MessageBox(PChar('Dosya Okuma Hatası.'),'HATA',MB_OK);
      sysutils.Abort;
   end;
try

    
   while not Eof(f) do begin
      ReadLn(f,satir);
      str:=satir;

      kalan:=Pos(' ',str)-1;
      URUNADI   :=Copy(str,1,kalan );

      str:= Copy(str,kalan+2,Length(str) );
      kalan:=Pos(' ',str)-1;
      ADET   :=Copy(str,1,kalan );

      str:= Copy(str,kalan+2,Length(str) );
      kalan:=Pos(' ',str)-1;
      AGIRLIK   :=Copy(str,1,kalan );

      str:= Copy(str,kalan+2,Length(str) );
      kalan:=Pos(' ',str)-1;
      if kalan=-1 then kalan:=Length(str);  //son değer için
      SIPARISNO   :=Copy(str,1,kalan );

   
   end;

   

finally
   CloseFile(f);

end;

end;
ekteki çalışan örneğe bakabilirsin.
Dosya ekleri
textoku.rar
(33.77 KiB) 268 kere indirildi
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

hocam ilgin için çok saol öncelikle
değişik bir yönden yaklaşmışsın olaya
tamam kabul bilgileri o şekilde aldık diyelim
yazdırıken benim istediğim formatta nasıl yazdıracağız asıl problem o ?

format şu şekilde
KAGA OTOMASYON A.Ş (BÜYÜK FONTTA OLACAK)
ÜRÜN ADI : PLASTİK (ÜRÜN ADI SABİT PLASTİK HER SATIDAN OKUNAN VERİDEN GELİYOR)
ÜRÜN KODU :METAL (AYNI)
SİPARİŞ NO :12344 (AYNI)

BU ŞEKİLDE HER SATIRDAN ALINAN BİLGİLER AYRI BİR A4 TEN ÇIKTI OLARAK ALINACAK
ASLINDA FORMDA BİLGİLERİN GÖRÜNMESİNE BİLE GEREK YOK DİREKT YAZICIYA GÖNDERSEDE RAZIYIM
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen dynamo »

yazdırma işi kolay.sadece hangi rapor aracını kullanacağınızı söyleyin.

Her bir satırı A4'e yazdıracaksın.Diyelim ki 10 satır bilgi var.Bu durumda yazıcıdan 10 tane A4 yazdıracak.Doğru mu?
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

hocam doğrudur
diyelimki txt dosyasında 10 tane satır olsun
ben her satırı ayrı bir a4 te çıkartmak istiyorum
yanlız txt dosyasındaki gibi düz satır şeklinde değil üstte de verdiğim örnekteki gibi olacak çıktılar
ama birde şöyle bir durum var bazı satırlar çok büyük puntalarla bazılarıda küçük puntalarla yazdırılması gerekiyor
yaptırabilirmiyiz böyle birşey

dünden beri uğraştım forma memo ekleyerek istediğim bütün bilgileri okutturdum ama formun yüksekliği kurtarmadı sığmıyor benim istediğim büyüklükte olduğu zaman yazlılar
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen dynamo »

kullanımı kolay olan FreeReport kullandım.FreeReport hakkında bilginiz yoksa formda makaleler bölümünde detaylı açıklamalar var.

FreeReport içinde FRDEMO.exe dosyasından frf uzantılı rapor dosyasını açıp tasarım ekranında font,büyüklük,renk istediğin şekilde ayaralayabiliyorsun.
(Rapor klasörü içinde rapor1.frf)

ekteki örnekte var.
Dosya ekleri
textoku.rar
(40.67 KiB) 214 kere indirildi
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

hocam dosyayı indirdim ama hata veriyor
[DCC Fatal Error] rapor.pas(7): F1026 File not found: 'FR_Ctrls.dcu'
aynı hatayı
FR_DSet, FR_DBSet, FR_Class, FR_Desgn,FR_View bunlar içinde veriyor
napmam lazım?
kagakadir
Üye
Mesajlar: 32
Kayıt: 11 Eki 2010 11:52

Re: txt dosyadan veri alıp yazdırma

Mesaj gönderen kagakadir »

hocam ben 2010 kullanıyorum bundan kaynaklı bir sorun olabilir mi ?
Cevapla