str birleştirme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
str birleştirme
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.
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.
Re: str birleştirme
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...
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;
Re: str birleştirme
Ü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.
Re: str birleştirme
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.
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.
Kod anlaşılır olduktan sonra sorunu çözebilir, ancak ondan sonra copy/paste yaparak değişkenleri elenmiş bir koda bırakabilirsiniz.
Başarılar.
Uzun zamandır da foruma girmiyordum. Geriye çok gitmeden son zamanlarda sorulan sorulara cevap vermeye gayret ediyorum.

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.

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;
Re: str birleştirme
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.
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.
Re: str birleştirme
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.
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;
Re: str birleştirme
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.
Re: str birleştirme
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
...........
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.
Re: str birleştirme
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
.. 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.
// EKLEME //
StringReplace yerine istersen aşağıdaki şekilde bir fonksiyon uyguladım onu da kullanabilirsin. Tercih senin...
kullanımı da şöyle
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 :


Kod: Tümünü seç
23 443 05 23 0
20 404 44 03 0

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...

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;
Kod: Tümünü seç
slDosya.LoadFromFile(strHedef);
SondakiSifirlariDegistir( slDosya, iSayac );
slUrun.AddStrings(slDosya);