Bir projemde html kodlarını replace ile değiştirip
Ftp ye gönderiyorum
Yanlız kimi zaman çok satırlı ekleme yapmam gerekiyor
Birden fazla memoyu birleştirerek işimi görüyorum ama
Bu sayı arttıkca işkence olacak
Memo1.text içeriği
Ali
Hasan
Hüseyin
Zeynep
İstanbul
Ankara
İzmir
Samsun
Böyle bir içerikte ben yeni isim eklediğimde
Zeynepten sonra eklenmesini istiyorum
Döngüye sokacağım ama araya satır eklemeyi nasıl yaparım
Memo araya satır ekleme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 140
- Kayıt: 11 Oca 2009 10:25
Memo araya satır ekleme
bilmezler bilmediklerinide bilmezler ama kendilerini bilir sanırlar
Re: Memo araya satır ekleme
Söyle bir kod işinize yarıyacağını düşünüyorum.
Kod: Tümünü seç
var
i:integer;
aranan,eklenecek:string;
begin
aranan:='zeynep';
eklenecek:='mesut';
for i := 0 to memo1.Lines.Count -1 do
begin
if pos(uppercase(aranan),uppercase(memo1.lines[i]))>0 then
memo1.Lines[i+1]:=eklenecek;
end;
end;
-
- Üye
- Mesajlar: 140
- Kayıt: 11 Oca 2009 10:25
Re: Memo araya satır ekleme
Teşekkürler ama bu durumda aynı isimden
Veya aynı tutardan rakam denk geldiğinde sorun olmazmı
Veya aynı tutardan rakam denk geldiğinde sorun olmazmı
bilmezler bilmediklerinide bilmezler ama kendilerini bilir sanırlar
Re: Memo araya satır ekleme
Merhaba,
Aşağıdaki kod içinde birden fazla sorun var.
- Blok içinde kalan kodlar (begin..end, try..finally..end, vb.) okumayı kolaylaştırması adına en az iki karakter içeriden yazılır. (Değişken tanımı yapılan bölüm de blok olarak düşünülmelidir)
- Değişken isimlerinde kelimelerin ilk harfleri büyük yazılır. (Birden fazla kelime için de durum aynıdır).
Kod ile ilgili potansiyel hatalar aşağıdaki gibidir:
1- Eğer Memo içinde 10 satır var ise ve aranan bilgi 10. satırda ise bu kod hata verecektir.
2- Aşağıdaki satır her zaman için aranıp bulunan kelimenin bir sonraki satır bilgisinin üzerine yazacak ve veri kaybına sebep olacaktır.
Bunun dışında;
- Eğer Delphi sürümü 2009 ve sonrası ise büyük harf dönüşümü için Türkçe karakterlerde (özellikle küçük ı harfi için) sorun olmaması adına helper fonksiyon ToUpper() kullanılmalıdır. UpperCase() fonksiyonu 7bit ASCII tablo kullanarak büyük harf dönüşümü yapar. ToUpper() helper fonksiyonu ise işletim sistemi "locale" bilgisine göre dönüşüm yapar.
- Pos() fonksiyonu burada gerekli değil. Soruda belirtildiği kadarıyla aranılan kelime tam olarak biliniyor.
Bu açıklamalar doğrultusunda Delphi 2009 ve sonrası için aşağıdaki gibi bir kod yazılabilir.
Kullanımı şöyle olacaktır:
Bununla birlikte, orjinal soru açıkça anlaşılır değil. TMemo nesneleri binlerce satır bilgiyi rahatlıkla hafızalarında tutabilirler. Normal koşullarda bir taneden fazla TMemo kullanımına gerek yoktur. Dolayısıyla soruna özel çözüm önerisi sunulabilmesi adına örnekler ve sorun ile ilgili daha detaylı bilgi verilmesinde fayda var.
Aşağıdaki kod içinde birden fazla sorun var.
Öncelikle her bir programlama dili kendisine özel zorunlu olmayan ancak kod okumayı kolaylaştırıcı bir kullanım standarda sahiptir. Pascal dili için bunlardan bazıları;seci20 yazdı: ↑04 Nis 2018 10:36 Söyle bir kod işinize yarıyacağını düşünüyorum.
Kod: Tümünü seç
var i:integer; aranan,eklenecek:string; begin aranan:='zeynep'; eklenecek:='mesut'; for i := 0 to memo1.Lines.Count -1 do begin if pos(uppercase(aranan),uppercase(memo1.lines[i]))>0 then memo1.Lines[i+1]:=eklenecek; end; end;
- Blok içinde kalan kodlar (begin..end, try..finally..end, vb.) okumayı kolaylaştırması adına en az iki karakter içeriden yazılır. (Değişken tanımı yapılan bölüm de blok olarak düşünülmelidir)
- Değişken isimlerinde kelimelerin ilk harfleri büyük yazılır. (Birden fazla kelime için de durum aynıdır).
Kod ile ilgili potansiyel hatalar aşağıdaki gibidir:
1- Eğer Memo içinde 10 satır var ise ve aranan bilgi 10. satırda ise bu kod hata verecektir.
2- Aşağıdaki satır her zaman için aranıp bulunan kelimenin bir sonraki satır bilgisinin üzerine yazacak ve veri kaybına sebep olacaktır.
Kod: Tümünü seç
memo1.Lines[i+1]:=eklenecek;
- Eğer Delphi sürümü 2009 ve sonrası ise büyük harf dönüşümü için Türkçe karakterlerde (özellikle küçük ı harfi için) sorun olmaması adına helper fonksiyon ToUpper() kullanılmalıdır. UpperCase() fonksiyonu 7bit ASCII tablo kullanarak büyük harf dönüşümü yapar. ToUpper() helper fonksiyonu ise işletim sistemi "locale" bilgisine göre dönüşüm yapar.
- Pos() fonksiyonu burada gerekli değil. Soruda belirtildiği kadarıyla aranılan kelime tam olarak biliniyor.
Bu açıklamalar doğrultusunda Delphi 2009 ve sonrası için aşağıdaki gibi bir kod yazılabilir.
Kod: Tümünü seç
procedure InsertAfter(List: TStrings; const Searching: string; const ValueToInsert: string);
var
I: Integer;
Line: string;
begin
// Soruyu soran kişi belirtmemiş. Eğer boş listeye kayıt eklenmemeli ise aşağıdaki "if" bloğu olduğu gibi silinebilir
if List.Count = 0 then
begin
List.Add(ValueToInsert);
Exit();
end;
for I := 0 to Pred(List.Count) do
begin
Line := List[I];
if Searching.ToUpper() = Line.ToUpper() then
begin
if Succ(I) < List.Count then
List.Insert(Succ(I), ValueToInsert)
else
List.Add(ValueToInsert);
Exit();
end;
end;
end;
Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject);
begin
InsertAfter(Memo1.Lines, 'zeynep', 'fatma');
end;
Re: Memo araya satır ekleme
Hocam sizin gibi usta olamadık daha acemi işi bizimkisiertank yazdı: ↑04 Nis 2018 11:47 Merhaba,
Aşağıdaki kod içinde birden fazla sorun var.Öncelikle her bir programlama dili kendisine özel zorunlu olmayan ancak kod okumayı kolaylaştırıcı bir kullanım standarda sahiptir. Pascal dili için bunlardan bazıları;seci20 yazdı: ↑04 Nis 2018 10:36 Söyle bir kod işinize yarıyacağını düşünüyorum.
Kod: Tümünü seç
var i:integer; aranan,eklenecek:string; begin aranan:='zeynep'; eklenecek:='mesut'; for i := 0 to memo1.Lines.Count -1 do begin if pos(uppercase(aranan),uppercase(memo1.lines[i]))>0 then memo1.Lines[i+1]:=eklenecek; end; end;
- Blok içinde kalan kodlar (begin..end, try..finally..end, vb.) okumayı kolaylaştırması adına en az iki karakter içeriden yazılır. (Değişken tanımı yapılan bölüm de blok olarak düşünülmelidir)
- Değişken isimlerinde kelimelerin ilk harfleri büyük yazılır. (Birden fazla kelime için de durum aynıdır).
Kod ile ilgili potansiyel hatalar aşağıdaki gibidir:
1- Eğer Memo içinde 10 satır var ise ve aranan bilgi 10. satırda ise bu kod hata verecektir.
2- Aşağıdaki satır her zaman için aranıp bulunan kelimenin bir sonraki satır bilgisinin üzerine yazacak ve veri kaybına sebep olacaktır.Bunun dışında;Kod: Tümünü seç
memo1.Lines[i+1]:=eklenecek;
- Eğer Delphi sürümü 2009 ve sonrası ise büyük harf dönüşümü için Türkçe karakterlerde (özellikle küçük ı harfi için) sorun olmaması adına helper fonksiyon ToUpper() kullanılmalıdır. UpperCase() fonksiyonu 7bit ASCII tablo kullanarak büyük harf dönüşümü yapar. ToUpper() helper fonksiyonu ise işletim sistemi "locale" bilgisine göre dönüşüm yapar.
- Pos() fonksiyonu burada gerekli değil. Soruda belirtildiği kadarıyla aranılan kelime tam olarak biliniyor.
Bu açıklamalar doğrultusunda Delphi 2009 ve sonrası için aşağıdaki gibi bir kod yazılabilir.Kullanımı şöyle olacaktır:Kod: Tümünü seç
procedure InsertAfter(List: TStrings; const Searching: string; const ValueToInsert: string); var I: Integer; Line: string; begin // Soruyu soran kişi belirtmemiş. Eğer boş listeye kayıt eklenmemeli ise aşağıdaki "if" bloğu olduğu gibi silinebilir if List.Count = 0 then begin List.Add(ValueToInsert); Exit(); end; for I := 0 to Pred(List.Count) do begin Line := List[I]; if Searching.ToUpper() = Line.ToUpper() then begin if Succ(I) < List.Count then List.Insert(Succ(I), ValueToInsert) else List.Add(ValueToInsert); Exit(); end; end; end;
Bununla birlikte, orjinal soru açıkça anlaşılır değil. TMemo nesneleri binlerce satır bilgiyi rahatlıkla hafızalarında tutabilirler. Normal koşullarda bir taneden fazla TMemo kullanımına gerek yoktur. Dolayısıyla soruna özel çözüm önerisi sunulabilmesi adına örnekler ve sorun ile ilgili daha detaylı bilgi verilmesinde fayda var.Kod: Tümünü seç
procedure TForm1.Button1Click(Sender: TObject); begin InsertAfter(Memo1.Lines, 'zeynep', 'fatma'); end;