TStringgrid dosyadan okuma

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
Dereck
Üye
Mesajlar: 9
Kayıt: 31 Eki 2013 07:10

TStringgrid dosyadan okuma

Mesaj gönderen Dereck » 17 Tem 2017 11:39

Merhaba arkadaşlar,

stringgrid e birden fazla txt dosya içerisindeki parasal değerleri yazdırmak istiyorum. dosyaların formatları şu şekilde

S1SUM03122018.txt
S2SUM02102018.txt
S3SUM14112018.txt
S4SUM15122018.txt
S5SUM16122018.txt

S1SUM.. S5SUM olarak nitelendirilen isimler başka bir formda 5 farklı stringin toplamları olduğu için bu şekilde isimlendirme yaptım. geriye kalanda zaten göreceğiniz üzere gün/ay/yıl şeklindedir.

bütün bu toplamları tek bir stringgride yazdırmak istediğimde aşağıdaki kodlarını gördüğünüz butona basıyorum. gün ve ay dağılımına göre stringgriddeki 31 x 12 alanda her parasal değer doğru bir şekilde yerine oturuyor.

fakat her butona basışımda sadece bir tabloya ait txtler okunuyor. Yani S1....txt ler bir kez daha bastığımda sadece S2....txt olanlar... bir kez daha bastığımda sadece S3.....txt olan dosyalar.. Yani her basışımda stringgrid temizleniyor ve o şekilde veri ekleniyor. Ben stringgrid temizlenmesini istemiyorum. Sadece tek seferde tüm S1,S2,S3,S4,S5.txt dosyaların okunup stringgride yazılmasını istiyorum. Bir çok yöntem denedim ancak başaramadım.Bir yerde mantık hatası yaptığımın farkındayım ancak günlerdir çözemiyorum. Kullanmış olduğum prosedürüde butondan sonraki kodda paylaştım. Yardımcı olursanız çok sevinirim. Teşekkürler

BUTON;

Kod: Tümünü seç

procedure TForm2.Button1Click(Sender: TObject);
var
i,j,ay:integer;
dt:tdatetime;
begin


       tt:=StrToDate('01/10/2018');
        for I := 1 to 365 do
                              begin

              if no > 5 then
              begin
                no:=1;

              end
              else
              begin
      Ay:=StrToInt(FormatDateTime('mm', tt));
      ay:=ay-1;
     LoadStringGrid2(StringGrid1,StrToInt(FormatDateTime('dd', tt)),Ay,'S' + IntToStr(no) + 'SUM' + FormatDateTime('dd', tt) + FormatDateTime('mm',tt) + FormatDateTime('yyyy', tt) + '.txt');
     
      tt:=IncDay(tt,1);

              end;

       end;
                 no:=no+1;


PROSEDÜR;

Kod: Tümünü seç

procedure LoadStringGrid2(StringGrid: TStringGrid; Cell:integer; mm:integer; const FileName: TFileName);
var
  f:          TextFile;
  iTmp: Integer;
  strTemp:    String;
begin


 AssignFile(f, FileName);
     {$I-}

Reset(f);


      with StringGrid do
  begin

   
        Readln(f, strTemp);
        Readln(f, strTemp);
        Readln(f, strTemp);
        Cells[mm,cell] := strTemp;


  end;
     CloseFile(f);


           {$I+}

     end;

Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1288
Kayıt: 07 May 2009 09:42
Konum: İstanbul
İletişim:

Re: TStringgrid dosyadan okuma

Mesaj gönderen SimaWB » 17 Tem 2017 02:17

no 5'ten büyükse 1 yapıyorsunuz ve sonra?
Sonra sizin kodlar çalışmıyor. Bir sonraki döngü değerine geçiyor.
Yani sizin LoadStringGrid2 fonksiyonu sadece no=1 için çalışıyor
There's no place like 127.0.0.1

Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1288
Kayıt: 07 May 2009 09:42
Konum: İstanbul
İletişim:

Re: TStringgrid dosyadan okuma

Mesaj gönderen SimaWB » 17 Tem 2017 02:18

Ayrıca; dosya ismini şu şekilde de oluşturabilirsiniz:

Kod: Tümünü seç

Format('S%dSUM%s.txt', [no, FormatDateTime('ddmmyyyy', tt)])
There's no place like 127.0.0.1

Dereck
Üye
Mesajlar: 9
Kayıt: 31 Eki 2013 07:10

Re: TStringgrid dosyadan okuma

Mesaj gönderen Dereck » 17 Tem 2017 02:20

SimaWB yazdı:no 5'ten büyükse 1 yapıyorsunuz ve sonra?
Sonra sizin kodlar çalışmıyor. Bir sonraki döngü değerine geçiyor.
Yani sizin LoadStringGrid2 fonksiyonu sadece no=1 için çalışıyor
no 5 ten büyük ise 1 yapıyorum ve sonra "for I := 1 to 365 do" döngü devam ediyor. Bu şekilde S1 ile başlayan tüm dosyalar listeleniyor. S2 S3 S4 S5 lerde listeleniyor fakat her biri ayrı bir sayfada listeleniyor. Benim amacım stringgrid temizlenmeden tümünün tek aşamada listelenmesi.

Dereck
Üye
Mesajlar: 9
Kayıt: 31 Eki 2013 07:10

Re: TStringgrid dosyadan okuma

Mesaj gönderen Dereck » 17 Tem 2017 03:42

Şu an için sorunumu ön ekleri kaldırarak çözdüm. S1 S2 vs. gibi farklılık oluşturan ekler kullanmıyorum. Tüm dosyalar sadece SUMGGAAYYYY.txt olarak kaydediliyor. Bu şekilde aşağıdaki kodlama ile sorunumu çözdüm.

Kod: Tümünü seç

procedure TForm2.Button1Click(Sender: TObject);
var
i,j,ay:integer;
dt:tdatetime;
begin


       tt:=StrToDate('01/10/2018');
        for I := 1 to 365 do
                              begin

            
      Ay:=StrToInt(FormatDateTime('mm', tt));
      ay:=ay-1;
     LoadStringGrid2(StringGrid1,StrToInt(FormatDateTime('dd', tt)),Ay,'SUM' + FormatDateTime('dd', tt) + FormatDateTime('mm',tt) + FormatDateTime('yyyy', tt) + '.txt');
     
      tt:=IncDay(tt,1);

          
       end;
           

Cevapla