txt den satır satır veri okuma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
duraumsa
Üye
Mesajlar: 27
Kayıt: 24 Eki 2015 01:54

txt den satır satır veri okuma

Mesaj gönderen duraumsa »

iyi günler kolay gelsin.
txt uzantılı bir dosyanın içindeki verileri satır satır okumak istiyorum veriler (;) ile ayrılmış durumda ben bu verileri analiz edeceğim
veriler satırda aşağıdaki gibi sıralı her satırı ayrı okuyup her satırdaki veriyide tek tek almam gerekiyor
2542;2549;2558;2568;2579;2595;2604;2617;2663;0;0;0;0;
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: txt den satır satır veri okuma

Mesaj gönderen greenegitim »

Mücadele güzelleştirir!
duraumsa
Üye
Mesajlar: 27
Kayıt: 24 Eki 2015 01:54

Re: txt den satır satır veri okuma

Mesaj gönderen duraumsa »

linki inceledim teşekkür ederim.
linkteki örnekte TStringDynArray değişken tipini bende kabul etmiyor. araştırdım array of string tipinde değişken ile aynı imiş. bu konuda yardımcı olabilirmisiniz?
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: txt den satır satır veri okuma

Mesaj gönderen ertank »

duraumsa yazdı: 02 Haz 2018 11:15 iyi günler kolay gelsin.
txt uzantılı bir dosyanın içindeki verileri satır satır okumak istiyorum veriler (;) ile ayrılmış durumda ben bu verileri analiz edeceğim
veriler satırda aşağıdaki gibi sıralı her satırı ayrı okuyup her satırdaki veriyide tek tek almam gerekiyor
2542;2549;2558;2568;2579;2595;2604;2617;2663;0;0;0;0;
Merhaba,

Birçok farklı şekilde yapmak istediğinizi gerçekleştirebilirsiniz. Aşağıdaki yöntem örnek olması açısından verilmiştir.

Kod: Tümünü seç

uses
  System.IOUtils;

function ReadTextFile(const FileName: string; Lines: TStrings): Boolean;
var
  F: TextFile;
  ALine: string;
begin
  if not TFile.Exists(FileName) then Exit(False);

  AssignFile(F, FileName);
  {$I-}
  Reset(F);
  {$I+}
  if IOResult <> 0 then Exit(False);
  {$I-}

  try
    Lines.Clear();
    while not Eof(F) do
    begin
      ReadLn(F, ALine);
      if IOResult <> 0 then Exit(False);
      if ALine <> EmptyStr then Lines.Add(ALine);
    end;
  finally
    CloseFile(F);
    {$I+}
  end;

  Result := True;
end;
Fonksiyon kullanımı aşağıdaki gibi olacaktır:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Satirlar: TStringList;
begin
  Log.Clear();

  Satirlar := TStringList.Create();
  try
    if ReadTextFile(Edit1.Text, Satirlar) then
    begin
      ShowMessage('Dosya okuması tamam. Okunan satır: ' + Satirlar.Count.ToString());
    end;
  finally
    Satirlar.Free();
  end;
end;
Bununla birlikte siz yüksek ihtimal ile okuduğunuz satırları farklı bir yere kaydetmek isteyeceksiniz. Bunun için ayraç karakteri ile okunan her bir satırı kolonlara bölme işlemini aşağıdaki gibi yapmanız mümkün:

Kod: Tümünü seç

function TotalColumns(const Line: string; const Delimiter: Char = ';'): Word;
var
  Columns: TStringList;
begin
  Columns := TStringList.Create();
  try
    Columns.StrictDelimiter := True;
    Columns.Delimiter := Delimiter; // dosya içindeki kolon ayırıcı karakter
    Columns.DelimitedText := Line;
    Result := Columns.Count;
  finally
    Columns.Free();
  end;
end;

function GetColumn(const Line: string; const Index: Word; const Delimiter: Char = ';'): string;
var
  Columns: TStringList;
begin
  Columns := TStringList.Create();
  try
    Columns.StrictDelimiter := True;
    Columns.Delimiter := Delimiter; // dosya içindeki kolon ayırıcı karakter
    Columns.DelimitedText := Line;
    if Pred(Columns.Count) >= Index then Exit(Columns[Index]);
  finally
    Columns.Free();
  end;

  Result := EmptyStr;
end;
Aşağıdaki şekilde kolon verilerine ulaşmanız mümkün olabilir:

Kod: Tümünü seç

procedure LogLines(const Lines: TStrings; Log: TStrings);
const
  INDENT = Chr(VK_TAB);

var
  I: Integer;
  I2: Integer;
  KolonSayisi: Integer;
  KolonVerisi: string;
begin
  Log.BeginUpdate();
  try
    for I := 0 to Pred(Lines.Count) do
    begin
      Log.Add('Satır [' + Succ(I).ToString() + ']: ' + Lines[I]);
      KolonSayisi := TotalColumns(Lines[I]);
      Log.Add('Tahmini kolon sayısı: ' + KolonSayisi.ToString());
      for I2 := 0 to Pred(KolonSayisi) do
      begin
        KolonVerisi := GetColumn(Lines[I], I2);

        if KolonVerisi <> EmptyStr then  // En sona koyulan ayraç boş kolon anlamına gelir. Bu kontrol ediliyor
        begin
          Log.Add(INDENT + Succ(I2).ToString() + ': ' + KolonVerisi);
        end;
      end;
      Log.Add(EmptyStr);
    end;
  finally
    Log.EndUpdate();
  end;
end;
Test için kullanılan text dosya aşağıdaki içeriğe sahip:

Kod: Tümünü seç

2542;2549;2558;2568;2579;2595;2604;2617;2663;0;0;0;0;
542;549;558;568;579;595;604;617;663;0;0;0;0;
42;49;58;68;79;95;04;17;63;0;0;0;0;
2;9;8;8;9;5;4;7;3;0;0;0;0;
2542;2549;2558;2568;2579;2595;2604;2617;2663;0;0;0;0;
Örnek kodlar kullanıldığında çıktısı aşağıdaki gibi oluyor:

Kod: Tümünü seç

Satır [1]: 2542;2549;2558;2568;2579;2595;2604;2617;2663;0;0;0;0;
Tahmini kolon sayısı: 14
	1: 2542
	2: 2549
	3: 2558
	4: 2568
	5: 2579
	6: 2595
	7: 2604
	8: 2617
	9: 2663
	10: 0
	11: 0
	12: 0
	13: 0

Satır [2]: 542;549;558;568;579;595;604;617;663;0;0;0;0;
Tahmini kolon sayısı: 14
	1: 542
	2: 549
	3: 558
	4: 568
	5: 579
	6: 595
	7: 604
	8: 617
	9: 663
	10: 0
	11: 0
	12: 0
	13: 0

Satır [3]: 42;49;58;68;79;95;04;17;63;0;0;0;0;
Tahmini kolon sayısı: 14
	1: 42
	2: 49
	3: 58
	4: 68
	5: 79
	6: 95
	7: 04
	8: 17
	9: 63
	10: 0
	11: 0
	12: 0
	13: 0

Satır [4]: 2;9;8;8;9;5;4;7;3;0;0;0;0;
Tahmini kolon sayısı: 14
	1: 2
	2: 9
	3: 8
	4: 8
	5: 9
	6: 5
	7: 4
	8: 7
	9: 3
	10: 0
	11: 0
	12: 0
	13: 0

Satır [5]: 2542;2549;2558;2568;2579;2595;2604;2617;2663;0;0;0;0;
Tahmini kolon sayısı: 14
	1: 2542
	2: 2549
	3: 2558
	4: 2568
	5: 2579
	6: 2595
	7: 2604
	8: 2617
	9: 2663
	10: 0
	11: 0
	12: 0
	13: 0
Ekte örnek uygulamayı bulabilirsiniz. Delphi 10.2.3 üzerinde sorunsuz çalışmaktadır.
Dosya ekleri
read text file.rar
(29.36 KiB) 11 kere indirildi
En son ertank tarafından 15 Şub 2023 06:04 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
duraumsa
Üye
Mesajlar: 27
Kayıt: 24 Eki 2015 01:54

Re: txt den satır satır veri okuma

Mesaj gönderen duraumsa »

çok teşekkür ederim 'ertank'
emegine sağlık armut piş ağzıma düş olmuş.
ben yeniyim delphide kullandığınız komutların bazılarını bilmiyordum şimdi araştıra araştıra öğreniyorum.
tekrardan çok teşekkürler
Cevapla