Listview LoadFromFile ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Listview LoadFromFile ?

Mesaj gönderen ByDeniS »

Merhaba arkadaşlar ilk olarak yardımlarınızdan ötürü teşekkür ederim.

Listview hakkında bir sorum olucaktır.

Listview columns'ları bir txt dosyasındaki metinlerle yüklüyorum ve columns'ları bu şekilde oluşturuyorum.
Her oluşturduğum columns'ada farklı bir dosyadan yükleme yaptırmak istiyorum.

Yani Örnek Şema :

Columns1 | Columns2 | Columns3

Columns1'e x1.txt
Columns2'ye x2.txt'yi vs vs şeklinde yüklemek istiyorum.

x1,x2,... olark giden txt dosya isimlerini columns.caption'dan almasını istiyorum. Örneğin Columns1'e columns1.txt dosyasını yüklemesi columns2 ye column2.txt'yi yüklemesi.

inc ve while yöntemleri ile bunu denedim velakin ilk satırlara yükleme yaptırıyor ve txt içerisindeki son mesajı yüklüyor döngü göreği. Bu konufda bana yardımcı olabilirmisiniz.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Listview LoadFromFile ?

Mesaj gönderen CiTiZEN »

Şöyle halledilebilir diye düşünüyorum:
öncelikle dosya içeriği bir stringlist e aktarılır öncelikle stringlistin count değeri alınır repeat until ile stringlist count birer düşürülerek aynı zamanda listview nesnesinede birer eklenir şöyleki:

Kod: Tümünü seç

var stl:tstringlist;
STLCount,i:integer;
begin
i:=0;
stl:=tstringlist.create;
stl.loadfromfile(dosya adın); //stringlist e dosyayı yükle
STLCount:=stl.count; //stringlist in değer sayısını al
repeat // stringlist değeri 0 olana dek dönecek döngü
i:=i+1;
STLCount:=STLCount-1; //stringlist değer sayısından bir çıkart
listview1.items.add; //listview e 1 ekle
listview.items.item[i].Caption:=STL.sring[i]); //eklenen listview nesnesine stringlsitteki değeri aktar
until STLCount=0; // stringlist değeri 0 olana dek dönecek döngü

//alt item eklemek içinse
listview.items.item(i).subitems.add(STL.strings[i]); //ana değere eklenmiş alt değere stringlist değeri aktar
//burada listview.items.item(i) ana değerin konumu
//ubitems.add(STL.strings[i]);  alt değerin konumu
Kodlarda ufak aksaklıklar olabilir deneme imkanım yoktu
kolay Gelsin
UWESIS CORPORATION
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: Listview LoadFromFile ?

Mesaj gönderen ByDeniS »

Bir kısımda problem var !

Colums1 haliyle additems oluyor comluns2 haliyle addsubitems oluyor.

Bunu tek döngüyle yapamıyormuyum izlediğim kod şöyle birşey.

Kod: Tümünü seç

AssignFile(oku,'Lang\Lang.txt');
Reset(oku);
While not eof(oku) do
begin
Readln(oku,satir);
ListView1.Columns.Add.Caption:=(satir);
end;
Bu kodla Lang.txt içerisindeki her satırı columns olarak belirliyor. Şimdi txt içerisinde Türkçe , ingizlice yazıyor. bunları columns.caption olarak belirliyor. Buradan columns captionları değer alarak dosya uzantısını ekletip o columns'a o dosyaya ait içeriği yükletmek amacım.

Devamında izlediğim ve tıkandığım kısım şurası .

Kod: Tümünü seç

AssignFile(oku,'Lang\' + ListView1.Columns.Items[0].Caption +'.lng'); //Burada her columns'değerini alması lazım !
Reset(oku);
While not eof(oku) do
begin
i1:=; // Burada Dosyanın count'unun belirtemediğim için satır numarasını alamadım.
for i:=0 to i1-1 do
Readln(oku,satir);
ListView1.Items.Add;
ListView1.Items[i].Caption:=satir; // yukarısı hallolsa burası oluyor sanırım.
end;
Umarım anlatabilmişimdir.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Listview LoadFromFile ?

Mesaj gönderen CiTiZEN »

Dosyanın count değerini belirleyemiyorum demişsin bence şu an aklıma gelen en akıllıca yöntem dosyayı bir stringlist e aktarıp countu belirleyip o stringlist içerisindeki değerler bitene kadar listview e değer aktarımı yapmak
UWESIS CORPORATION
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: Listview LoadFromFile ?

Mesaj gönderen ByDeniS »

Verdiğin code ilede düzenleyip deneme yaptım velaki subitems'e ekleme yapmıyor döngüde. Verdiğin kodda şöyle bir olay söz konusu oluyor.

STL.LoadFromFile('Lang\'+ ListView1.Columns.Items.Caption +'.lng');

Bunun için while döngüsümü kullanmalıyım. Yoksa

ListView1.Columns.Count; değerini alıptamı atamalıyım.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Listview LoadFromFile ?

Mesaj gönderen CiTiZEN »

while değilde downto döngüsü de iş görebilir stringlistin count değerini 0 a düşene kadar kontrol edip ekleme yapabilirsin
UWESIS CORPORATION
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Listview LoadFromFile ?

Mesaj gönderen CiTiZEN »

sorun şu yapmaya çalıştığın şey listview da önce dosya isimleri sonra da dosyaların yollarını göstermek mi?

dosya1 c:\dosya1
dosya2 c:\dosya2

gibi?
UWESIS CORPORATION
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: Listview LoadFromFile ?

Mesaj gönderen ByDeniS »

Hayır öyle değil.

Listview başlıklarını (columns) Bir txt dosyasından yükletiyorum

C:\Diller.txt

Sonra her başlığın (columns) adını alarak bir diğer dosyaya erişiyor.

Yani Columns adı Türkçe bundan yola çıkarak C:\Türkçe.txt dosyasını alıyor.

ve bunu ilgili başlığa (columns) yüklemesini istiyorum. Türkçe başlıpının altına türkçe.txt'dekiler ingilizceye ingilizce.txt'dekiler.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: Listview LoadFromFile ?

Mesaj gönderen ByDeniS »

Resim


Resim daha net açıklar sanırım.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Listview LoadFromFile ?

Mesaj gönderen CiTiZEN »

her ne kadar ne yapmak istediğini tam olarak anlamasamda bir örnek daha hazırladım: benim c de 1.txt ve 2.txt isimli iki dosyam var bu dosyalardan 1.txt nin içeriğini önce sl e sonrada listview e 2.txt yi ise önce sl1 e sonra listview e aktarıyorum şu şekilde;

Kod: Tümünü seç

var sl,sl1:tstringlist;
slcount,i:integer;
begin
i:=0;
sl:=TStringList.Create;
sl1:=TStringList.Create;
sl.LoadFromFile('C:\1.txt');
sl1.LoadFromFile('C:\2.txt');
slcount:=sl.Count;
repeat
slcount:=slcount-1;
i:=i+1;
ListView1.Items.Add;
ListView1.Items.Item[i-1].Caption:=sl.Strings[i-1];
ListView1.Items.Item[i-1].SubItems.Add(sl1.Strings[i-1]);
until slcount=0;
end;
UWESIS CORPORATION
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Listview LoadFromFile ?

Mesaj gönderen CiTiZEN »

şunuda belirtmeliyim ben burda örnek olması açısından iki dosyanın içeriğinin eşit satırlarda olduğunu varsayarak işlem yaptım gözardı edersen yanılırsın eğer değerler eşit değilse ayrı ayrı işlemler yapmalısın.
UWESIS CORPORATION
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: Listview LoadFromFile ?

Mesaj gönderen ByDeniS »

Bu verdiğin kod bu şekilde çalışıyor tekrar teşekkür ederim.

Yalnız 1.txt 2.txt diye yani dosyalar belirli.

Bunda dosyalar belirli değil. 1 columns varsa bir dosya 5 columns varsa 5 dosya yani sabit birşey değil..

Bu değişkenliğe karşı ne gibi bir yol izleyeceğim.. Bunun için tek birtane stringslist kullanmam gerekiyor sanıyorum.
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Listview LoadFromFile ?

Mesaj gönderen CiTiZEN »

şöyle bir değişiklik yapsak sanırım iş görür tabi başka yollarıda vardır ama şu an imkanım sınırlı:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var sl,sl1:tstringlist;
slcount,sl1count,i:integer;
begin
i:=0;
sl:=TStringList.Create;
sl1:=TStringList.Create;
sl.LoadFromFile('C:\1.txt');
sl1.LoadFromFile('C:\2.txt');
slcount:=sl.Count;
sl1count:=sl1.Count;

if sl1count>slcount then
repeat
sl1count:=sl1count-1;
  ListView1.Items.Add;     //hangisindeki değer fazlaysa ona göre item eklenecek
until sl1count=0;
sl1count:=sl1.Count;

if slcount>sl1count then
repeat
slcount:=slcount-1;
ListView1.Items.add;
until slcount=0;
slcount:=sl.Count;

repeat
slcount:=slcount-1;
i:=i+1;
ListView1.Items.Item[i-1].Caption:=sl.Strings[i-1];
until slcount=0;


i:=0;
repeat
sl1count:=sl1count-1;
i:=i+1;
ListView1.Items.Item[i-1].SubItems.Add(sl1.Strings[i-1]);
until sl1count=0;
end;
UWESIS CORPORATION
Kullanıcı avatarı
ByDeniS
Üye
Mesajlar: 144
Kayıt: 03 Oca 2009 12:24
Konum: My Computer

Re: Listview LoadFromFile ?

Mesaj gönderen ByDeniS »

işi birazdaha uzun bir kodla hallettim ve sınırlama koymak zorunda kaldım. Ama yaptığım uzun kod umarım tam olarak ne yapmaya çalıştığımı anlamanıza belki yardımcı olur :)

Ve bundaki sınırlamayı kaldırıp sınırsız umarım yapabileceğim bir yöntem bulabilirim.

Kod: Tümünü seç

i:=0;
sl:=TStringList.Create;
sl1:=TStringList.Create;
sl2:=TStringList.Create;
sl3:=TStringList.Create;
sl4:=TStringList.Create;
sl5:=TStringList.Create;

sl.LoadFromFile('Lang\'+ ListView1.Columns.Items[0].Caption +'.txt');

i1:=ListView1.Columns.Count;
if i1 > 1 Then
 begin
  sl1.LoadFromFile('Lang\'+ ListView1.Columns.Items[1].Caption +'.txt');
 end;
if i1 > 2 Then
 begin
  sl2.LoadFromFile('Lang\'+ ListView1.Columns.Items[2].Caption +'.txt');
 end;
if i1 > 3 Then
 begin
  sl3.LoadFromFile('Lang\'+ ListView1.Columns.Items[3].Caption +'.txt');
 end;
if i1 > 4 Then
 begin
  sl4.LoadFromFile('Lang\'+ ListView1.Columns.Items[4].Caption +'.txt');
 end;
if i1 > 5 Then
 begin
  sl5.LoadFromFile('Lang\'+ ListView1.Columns.Items[5].Caption +'.txt');
 end;

slcount:=sl.Count;
repeat
i1:=ListView1.Columns.Count;
slcount:=slcount-1;
i:=i+1;
ListView1.Items.Add;
ListView1.Items.Item[i-1].Caption:=sl.Strings[i-1];
 if i1 > 1 Then
  Begin
   ListView1.Items.Item[i-1].SubItems.Add(sl1.Strings[i-1]);
  end;
 if i1 > 2 Then
  Begin
   ListView1.Items.Item[i-1].SubItems.Add(sl2.Strings[i-1]);
  end;
 if i1 > 3 Then
  Begin
   ListView1.Items.Item[i-1].SubItems.Add(sl3.Strings[i-1]);
  end;
 if i1 > 4 Then
  Begin
   ListView1.Items.Item[i-1].SubItems.Add(sl4.Strings[i-1]);
  end;
 if i1 > 5 Then
  Begin
   ListView1.Items.Item[i-1].SubItems.Add(sl5.Strings[i-1]);
  end;

until slcount=0;
end;
·•· Bilgi Güçtür ! Bu Gücü Hisset ! ·•·
Kullanıcı avatarı
CiTiZEN
Üye
Mesajlar: 1163
Kayıt: 06 Oca 2008 04:15

Re: Listview LoadFromFile ?

Mesaj gönderen CiTiZEN »

neden böyle bir sınırlamaya ihtiyaç duydun anlamadım doğrusu
UWESIS CORPORATION
Cevapla