str birleştirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

str birleştirme

Mesaj gönderen sr1111 »

klasorumde 1.txt, 2.txt diye 40,50 civarinda sayida txt dosyasi var.
sirali halde bunlari tek bir dosyada nasil birlestirebilirim. veya stringlisde

Fakat birleşirken 1,2,3,4,5,6,7,8,9,10,11 diye birleşmesi gerek.
bircok yerde 1,10,2,20 diye siralam olarak birleşiyor.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: str birleştirme

Mesaj gönderen mrmarman »

Merhaba.

Pratik yolu; klasördeki dosyaların dosya adına ilişkin formatını ve sayısını bildiğin için statik bir yöntem izleyebilirsin.

if fileexists( strDosyaAdi ) sorgusunun boolen sonucu o dosyanın var olup olmadığını bildirir.

bir sayaç (integer) (1) 'den dosya sayısı olan (n)'e kadar dönerken fileexists ile dosyanın var olup olmadığını sorgulayıp, bunu ardışık olarak yükleyebilirsin.

Aşağıdaki örnekte, proje klasöründe bulunduğunu farz ediyoruz...

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  iSayac, iBas, iSon : Integer;
  strDosyaAdi : String;
  slDosya, slUrun : TStringList;
begin
  iBas := 0;
  iSon := 100;
  slDosya := TStringList.Create;
  slUrun  := TStringList.Create;
  for iSayac := iBas to iSon do
  begin
    // ExtractFilePath(Application.Exename) : projemizin olduğu klasörü verir
    strDosyaAdi := ExtractFilePath(Application.Exename) + IntToStr(iSayac) + '.TXT';
    if FileExists(strDosyaAdi) then
    begin
      slDosya.LoadFromFile(strDosyaAdi);
        slUrun.Add( strDosyaAdi );
        slUrun.Add( '-------------------------' );
        slUrun.AddStrings(slDosya);
    end;
  end;
  // Burada slUrun senin birleştirilen metin içeriğin.
  // ...dilediğin şekilde kullanabilirsin
  // ...
  // ...
  //-------------------------------------------------
  slUrun.Free;
  slDosya.Free;
end;
Resim
Resim ....Resim
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: str birleştirme

Mesaj gönderen sr1111 »

Üstadım tesekkur ederim yardimlarimiza koşuyorsunuz.
En son sr1111 tarafından 02 Eki 2013 01:48 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: str birleştirme

Mesaj gönderen mrmarman »

Rica ederim, bugünlerde işim gereği bazı zaman boşlukları olduğundan vakit buldum.
Uzun zamandır da foruma girmiyordum. Geriye çok gitmeden son zamanlarda sorulan sorulara cevap vermeye gayret ediyorum. :idea:

Konuya dönersek, sistem doğru ancak string yanaştırma yaparken kural hatası yapmışsınız.

Bu gibi durumlarda (hata veren kodla uğraşırken) uzun satırlı kodları kısa değişkenli gruplara bölün ki hatayı kolay takip edebilesiniz.
Hemen kestirmeden uzun kodlar yazmadan önce, biraz hamallık gibi görünse de aşağıdaki şekilde değişkeni bol bir yapı oluşturun.
:idea: Kod anlaşılır olduktan sonra sorunu çözebilir, ancak ondan sonra copy/paste yaparak değişkenleri elenmiş bir koda bırakabilirsiniz.

Kod: Tümünü seç

Var
  strConverter, strKaynak, strHedef : String;
  iSayac, iBas, iSon : Integer;
begin
  iBas := 0;
  iSon := 100;
  for iSayac := iBas to iSon do
  begin
    strConverter := ExtractFilePath(Application.ExeName) + 'convert.exe';
    strKaynak    := ExtractFilePath(Application.ExeName) + IntToStr(iSayac)+'.tif';
    strHedef     := ExtractFilePath(Application.ExeName) + IntToStr(iSayac)+'.txt';
    if FileExists( strKaynak ) then
    begin
      ShellExecute_AndWait( strConverter, strKaynak + ' ' +strHedef );
    end;
  end;
end;
Başarılar.
Resim
Resim ....Resim
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: str birleştirme

Mesaj gönderen sr1111 »

hocam cok zahmet veriyorum ama şöyle yapabilirmiyiz.
1.tif i 1.txt ye cevirdikten sonra stringliste atip hemen 1.txt yi silsek
sonra 2.tif 2.txt ye gecse onuda stringliste attiktan sonra silse, yani stringliste atip, silip ve diğer tiflere gecse


hocam bir de siteniz calismiyor incelemek istemiştim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: str birleştirme

Mesaj gönderen mrmarman »

Merhaba.

Web Sitesi alan adını uzatmayı ihmal etmişim, öyle de kaldı.

Aşağıdaki kodda sistem açık ve anlaşılır umarım.

Kod: Tümünü seç

Var
  iSayac, iBas, iSon : Integer;
  slDosya, slUrun : TStringList;

  strConverter, strKaynak, strHedef : String;
begin
  iBas := 0;
  iSon := 100;
  slDosya := TStringList.Create;
  slUrun  := TStringList.Create;
  for iSayac := iBas to iSon do
  begin
    strConverter := ExtractFilePath(Application.ExeName) + 'convert.exe';
    strKaynak    := ExtractFilePath(Application.ExeName) + IntToStr(iSayac)+'.tif';
    strHedef     := ExtractFilePath(Application.ExeName) + IntToStr(iSayac)+'.txt';
    if FileExists( strKaynak ) then
    begin
      ShellExecute_AndWait( strConverter, strKaynak + ' ' +strHedef );
      if FileExists(strHedef) then
      begin
        slDosya.LoadFromFile(strHedef);
          slUrun.Add( strHedef );
          slUrun.Add( '-------------------------' );
          slUrun.AddStrings(slDosya);
      end else
      begin
          slUrun.Add( '!!!' );
          slUrun.Add( 'HATA !: ' + strHedef + ' Dosyası Convert EDİLEMEMİŞ olacak ki, TIF mevcut iken TXT dosya bulunamadı...' );
          slUrun.Add( '!!!' );
      end;

    end;
  end;
  // Burada slUrun senin birleştirilen metin içeriğin.
  // ...dilediğin şekilde kullanabilirsin
    slUrun.SaveToFile( ExtractFilePath(Application.ExeName) + 'Urun.TXT' );
  //-------------------------------------------------
  slUrun.Free;
  slDosya.Free;
end;
Resim
Resim ....Resim
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: str birleştirme

Mesaj gönderen sr1111 »

bu kadar çok bile yeterli teşekkür ederim.
En son sr1111 tarafından 02 Eki 2013 01:49 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: str birleştirme

Mesaj gönderen mrmarman »

Rica ederim, başarılar.
Resim
Resim ....Resim
sr1111
Üye
Mesajlar: 220
Kayıt: 06 Mar 2008 01:59

Re: str birleştirme

Mesaj gönderen sr1111 »

ustadim araya aşağıdaki gibi bir şey girmeye calistim olmadi nerede hata yapiyorum.
txt icerigindeki en sondaki sıfırlari
23 443 45 23 0
22 4 454 23 0
...........
En son sr1111 tarafından 02 Eki 2013 01:51 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: str birleştirme

Mesaj gönderen mrmarman »

Merhaba.

slUrun senin tüm veri ürün tablondur. Bahsettiğin işlem bu StringList üzerinde YAPILMAMALI.

slUrun'e eklenen( yani burada strHedef'den gelen slDosya oluyor ) içeriğini önce manipüle edecek, sonra da dilediğin şekle bürünen halini slUrun.Add( ) ile eklemelisin.

Yani Şöyle olacak :
:!: bu arada veri dizisi içerisinde en sondaki (önünde boşluk olan 0) dışında aralarda da gelme ihtimali olmadığına eminsen aşağıdaki gibi yap.
:!: Yani

Kod: Tümünü seç

23 443 05 23 0
20 404 44 03 0
.. gibisinden aralarda da (önünde boşluk olan 0) hiç olma ihtimali bulunmuyorsa uygularsın.
:!: Aksi halde aşağıdaki işlem yanlış çalışır. Ara bir fonksiyon yazıp her satırın sadece sonundaki (0)'ın değişeceğini belirmelisin.

Kod: Tümünü seç

 slDosya.LoadFromFile(strHedef);
 slDosya.Text := StringReplace(slDosya.Text, ' 0', ' '+IntToStr(iSayac), [rfReplaceAll] ); 
 slUrun.AddStrings(slDosya);

// EKLEME //

StringReplace yerine istersen aşağıdaki şekilde bir fonksiyon uyguladım onu da kullanabilirsin. Tercih senin... :idea:

Kod: Tümünü seç

Procedure SondakiSifirlariDegistir( var Liste:TStringList; YeniDeger:Integer );
var
  iSayac   : Integer;
  strSatir : String;
begin
  for iSayac := 0 to Liste.Count - 1 do
  begin
    strSatir := Trim( Liste[iSayac] );
    // şimdi en sondaki tek 0 rakamı hariç baş kısmını alıcaz...
    strSatir := Trim( Copy(strSatir, 1, Length(strSatir)-1) );
    strSatir := strSatir + ' ' + IntToStr(YeniDeger);
    // nihai sonucu listeye geri yazıyoruz.
    Liste[iSayac] := strSatir;
  end;
end;
kullanımı da şöyle

Kod: Tümünü seç

 slDosya.LoadFromFile(strHedef);
 SondakiSifirlariDegistir( slDosya, iSayac );
 slUrun.AddStrings(slDosya);
Resim
Resim ....Resim
Cevapla