virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen erdogan_ozkaya »

Merhaba,

Arkadaşlar, aşağıdaki gibi içeriğe sahip bir txt dosyam var ";" ayrılmış durumda bunu nasıl adoquery import edebilirim ?

Kod: Tümünü seç

01 001;01.01.2014;OCAK 2014 AİDAT;150;0
01 001;07.01.2014;AİDAT(Banka) 1/1 AİDAT+SU+GECİKME;0;150
01 001;01.02.2014;OCAK 2014 AİDAT ;75;0
01 001;01.02.2014;ŞUBAT 2014 AİDATI;125;0
01 001;10.02.2014;AİDAT(Banka) 1/1 AİDAT;0;150
01 001;01.03.2014;MART 2014 AİDATI;125;0

teşekkürler
Hashirama
Üye
Mesajlar: 81
Kayıt: 26 Kas 2013 03:42

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen Hashirama »

text dosyasının içeriğini excel e kopyalayın, excel de VERİ > METNİ SUTUNLARA DÖNÜŞTÜR > SINIRLANDIRILMIŞ > İLERİ DEYİP > NOKTALI VİRGÜLÜ seçin ve son deyin. Böylece verileriniz sutunlara ayrılmış olacak. Artık gerisi de basit bir şekilde veritabanına bağlamak kalıyor.
Kolay gelsin.
Efe
Üye
Mesajlar: 56
Kayıt: 09 Kas 2014 11:14

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen Efe »

RegEx kullanmalısınız.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen tayipk »

bununla ilgili bir procedure yazmanız gerekecektir. şöyleki

01 001;01.01.2014;OCAK 2014 AİDAT;150;0 satırını ele alırsak anladığım kadarıyla
01 001 Aidatlar Hesabı
01.01.2014 İşlem tarihi
OCAK 2014 AİDAT Açıklama
150 Muhtemelen Alınan tutar
0 burası nedir bir yorumum yok. yapmanız gereken il önce bir memoya txt yi load edeceksiniz. ardından memonun her satırında Pos yöntemiyle ";" karakterini arayacaksınız bundan sonrasıda ulduğunuz değeri adoqueryinizdeki ilgili fielda aktarmak hepsi.dilim döndüğünce anlatmaya çalıştım umarım başarabilmişimdir :) kolay gelsin.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen warder »

TStringList
Delimiter
DelimitedText
Yukardaki anahtar kelimelerle forumu incelerseniz çok fazla çözüm bulacağınızı sanıyorum.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen erdogan_ozkaya »

arkadaşlar cevaplarınız için çok teşekkür ederim. Acaba örnek kod verebilir misiniz ?

teşekkürler
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen erdogan_ozkaya »

şuan için önce verileri excel alıyorum sonra excelden import ediyorum.

01 001;01.01.2014;OCAK 2014 AİDAT;150;0 satırını ele alırsak anladığım kadarıyla
01 001 Aidatlar Hesabı / kısım daire
01.01.2014 İşlem tarihi / işlem tarihi
OCAK 2014 AİDAT Açıklama / açıklama
150 Muhtemelen Alınan tutar / alacak
0 burası nedir bir yorumum yok. / borç

TStringList
Delimiter
DelimitedText bunların import ile bir alakası yok gibi ?


örnek kodu olan varsa verebilir mi acaba ?

teşekkürler
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen warder »

erdogan_ozkaya yazdı: TStringList
Delimiter
DelimitedText
bunların import ile bir alakası yok gibi ?
Öneriyi ben yazdığım için değil, ileride inceleyenler için yazıyorum.
Sizin sorununuzda alakadan ötesi...
Alakayı kurduğunuzda ne kadar yanıldığınızı anlayabilirsiniz.
Dosyanızdaki ; işaretleri bunun için var.. Delimiter..
Dosyanızdaki her satır bunun için var.. DelimitedText
İki adet StringList ve bir for ile ayrı ayrı aldığınız bilgileri ne istiyorsanız yapabilirsiniz.
En basit, sade ve hızlı olanı budur...
Ayrıca...
Excel e yükleyip veriyi exceli yazan programcıların (muhtemelen benim önerime benzer bir mantık kullanarak)
geliştirdikleri yöntemle parseleyip kolonlara ayrıştırmasını sağlayıp tekrar almak problemi çözmek değildir.
Kulağı nereden göstermek bilemedim.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen erdogan_ozkaya »

Hocam delimiter olamaz demedim sadece bilmediğimi söyledim :) bilmediğim için zor geldi araştırdım dediğiniz gibi sadece text ayırıyor çok birşey anlayamadım :(( yinede teşekkürler. daha önce böyle bir kod yazdıysanız göndermeniz mümkün mü acaba ?

teşekkürler
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen warder »

erdogan_ozkaya yazdı: daha önce böyle bir kod yazdıysanız göndermeniz mümkün mü acaba ?
teşekkürler

Kod: Tümünü seç

	TStringList * stList = new TStringList;
	stList->LoadFromFile(".\\list.txt");
	TStringList * stSatir = new TStringList;
	stSatir->Delimiter = ';';
	stSatir->StrictDelimiter = true;
	for(int i = 0; i < stList->Count; i++) {
        stSatir->DelimitedText = stList->Strings[i];
		Memo->Lines->Add(stSatir->Strings[0]);
		Memo->Lines->Add(stSatir->Strings[1]);
		Memo->Lines->Add(stSatir->Strings[2]);
		Memo->Lines->Add(stSatir->Strings[3]);
		Memo->Lines->Add("----------------------");
		Application->ProcessMessages();
	}
	delete stList, stSatir;
Çıktısı..
01 001
01.01.2014
OCAK 2014 AİDAT
150
----------------------
01 001
07.01.2014
AİDAT(Banka) 1/1 AİDAT+SU+GECİKME
0
----------------------
01 001
01.02.2014
OCAK 2014 AİDAT
75
----------------------
01 001
01.02.2014
ŞUBAT 2014 AİDATI
125
----------------------
01 001
10.02.2014
AİDAT(Banka) 1/1 AİDAT
0
----------------------
01 001
01.03.2014
MART 2014 AİDATI
125
----------------------
Memo->Lines->Add(); yerine ne kullandığınız size kalmış...
Sanıyorum import ve delphi dönüşümü için gerekenleri yapabilirsiniz.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen erdogan_ozkaya »

delphi için değil sanırım bu C# için bir kod ?
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen erdogan_ozkaya »

aşağıdaki kod ile dışarı aktarıyorum ama içeri aktaramıyorum :(

Kod: Tümünü seç

procedure TForm1.btn3Click(Sender: TObject);
var
  txt : TextFile;
  i : integer;
begin
  AssignFile(txt, ExtractFilePath(ParamStr(0)) + '.\NetsEkstre.txt');
  Rewrite (txt);
  qry1.First;
  while not qryHAREKETLER_DB.Eof do
    begin
      for i := 0 to qryHAREKETLER_DB.Fields.Count - 1 do
        write(txt, qryHAREKETLER_DB.Fields[i].AsString + ';');
      writeln(txt, '');
      qryHAREKETLER_DB.Next;
    end;
    CloseFile(txt);
  end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: virgüllere ayrılmış txt dosyasını dbgrinde import etmek

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar aşağıdaki kod ile aktarıyorum ama bir kaç hata var

1.sonuncu değer sıfır ise aktarmıyor

2.alacağı borçtan çıkartıp bakiyeye eklemesini istiyorum nasıl yapabilirim ?

teşekkürler

Kod: Tümünü seç

procedure TForm1.btn5Click(Sender: TObject);
var
      i, j, Satir, Sayi:integer;
      Dosya:textfile;
      Zincir, Deger:string;
begin
      AssignFile(Dosya, 'NetEkstre.txt');
      Reset(Dosya);
 while not(eof(Dosya))do
 begin
      readln(Dosya, Zincir);
      Deger:='';
      i:=1;
      j:=0;
      Sayi:=0;
      qryHARAKET.Append;
   repeat
      Satir:=PosEx(';',Zincir,i);
      if Satir=0 then
      Satir:=length(Zincir);
      Deger:=copy(Zincir,i,Satir-Sayi-1);
      while pos(';',Deger)>0 do
     begin
        Delete(Deger,pos(';',Deger),1);
      end;
      Deger:=TrimLeft(Deger);
      Deger:=TrimRight(Deger);
      qryHARAKET.Fields[j].AsString:=Deger;
      inc(j);
      i:=posex(';',Zincir,i)+1;
      Sayi:=Satir;




   until (i>=length(Zincir))or(i<=1);

      if qryHARAKET.FieldByName('alacak').Value=''
      then qryHARAKET.FieldByName('alacak').Value:='0';
      if qryHARAKET.FieldByName('borc').Value=''
      then qryHARAKET.FieldByName('borc').Value:='0';

      qryHARAKET.FieldByName('bakiye').Value:=qryHARAKET.FieldByName('alacak').Value - qryHARAKET.FieldByName('borc').Value;

      qryHARAKET.Post;
 end;
end;
Cevapla