Autor Beitrag
wisler
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 18.12.04 22:30 
hi,
ich möchte in einem Memofeld nach einem bestimmten Text suchen, aber ohne Dialog, der Text ist bekannt.

Der Text steht irgendwo am Zeilenanfang, danach kommt bis Zeilenende ein Dateiname. Der soll ersetzt werden durch Caption von TForm1 wobei die Dateiendung z.B.".txt" erhalten bleiben soll.

Es soll also nach einem bestimmten Text gesucht werden, und der nachfolgende Text bis auf die letzten 4 Zeichen bis Zeilenende ersetzt werden durch den Namen der geöffneten Datei ausser deren Endung. :roll:

Hat jemand einen Tip?

Mfg
wisler
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 18.12.04 22:34 
Da sollten die String-Funktionen: Pos, Delete und Insert helfen. Sieh dir mal die OH dazu an. Ist eigentlich ganz einfach.
wisler Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 19.12.04 18:35 
Das klappt so nicht richtig. Ich müsste schon Kontrolle über die einzelnen Zeilen im Memo haben. Vielleicht die Positon finden in welcher Zeile mein Text steht, dann die ganze Zeile auslesen, löschen und dann eine entsprechende einfügen.

Leider weiss ich nicht wie. Hab es mal mit Memo1.Lines.IndexOf versucht, find aber auch keine richtigen Beispiele dazu.

Ein wenig Programm-Code wäre nicht schlecht. :flehan:
Mfg
wisler
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: So 19.12.04 19:02 
wisler hat folgendes geschrieben:
Ein wenig Programm-Code wäre nicht schlecht. :flehan:

Dito.

Zeige du, was du schon hast und beschreibe kurz, wo genau es hakt. Dann kann man wunderschön helfen.

Ansonsten bist du mit der Online-Hilfe ja schon auf die richtige Spur gebracht worden. Was man da nicht sofort versteht, muss man eben mit kleinen Testprogrämmchen "live und in Farbe" anschaulich machen. Memo-Felder und String-Verarbeitung z.B. lassen sich so bestimmmt erlernen.

Aber wie gesagt: Zeige, was du schon hast. Dann kann man schauen, was falsch ist.


Zuletzt bearbeitet von IngoD7 am So 19.12.04 19:05, insgesamt 1-mal bearbeitet
Basti
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 345

Windows Vista
D2005 Pers, D7 Pers
BeitragVerfasst: So 19.12.04 19:04 
Geh jede Zeile einzeln in einer Schleife durch (=> Memo.Lines.Count).
Für jede Zeile machst du folgendes:
1.) Prüfen ob gesuchter Text enthalten ist:

Zitat:
function Pos(Substr: string; S: string): Integer;
Die Funktion gibt den Indexwert des ersten Zeichens innerhalb des angegebenen Teil-Strings zurück, der in einem String vorkommt.

2.) Wenn Text gefunden (ergebnis<>0), dann den Text aus der Zeile löschen:
Zitat:
procedure Delete(var S: string; Index, Count:Integer);
Die Prozedur entfernt einen Teilstring aus einem String.

S ist logischerweise die Zeile, der Index das Ergebnis von Pos (liefert ja den Index des 1. Zeichens des gesuchten Strings) und Count ist die Länge des gesuchten Textes.
Wenn du das nun rausgeschnitten hast, bleibt laut deiner Beschreibung ja bloß noch der Dateiname über.


Ist übrigens genau das, was jasocul beschrieben hat.
Das ist das was du suchst, du musst es halt bloß wie oben richtig anwenden.

_________________
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: So 19.12.04 19:07 
ausblenden Quelltext
1:
2:
for i := 1 to memo1.lines.count -1 do
  if pos('mein Suchtext',memo1.lines[i]) > 0 then dosomething;


oder 0 to ...count
StefanH
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1144

Win XP
D5 Standard, D7 Pers, D2005 Pers
BeitragVerfasst: So 19.12.04 21:11 
retnyg hat folgendes geschrieben:
ausblenden Quelltext
1:
2:
for i := 1 to memo1.lines.count -1 do
  if pos('mein Suchtext',memo1.lines[i]) > 0 then dosomething;


oder 0 to ...count


nö. 0 to ...count-1!

_________________
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach."(Edsger W. Dijkstra)
"Ich bin nicht von Sinnen, sondern ich rede wahre und vernünftige Worte." (Paulus)
wisler Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 19.12.04 22:21 
Man dankt,
es klappt schon fast, habe folgendes gemacht:

Habe zuerst den gleichbleibenden Suchtext, mit dem Dateinamen von form1.Caption zusammengefügt, dann die Dateiendung abgschnitten und durch eine andere(immer gleich) ersetzt.
ausblenden Quelltext
1:
2:
3:
4:
5:
datei_name:= 'Suchtext'+ form1.Caption;//Anfangtext+Datei_name
i:= Pos('.txt', datei_name);//sucht die Datei-Endung
if i > 0 then
Delete(datei_name, i, 5);//löscht sie(keine Ahnung wozu die 5 ist,so übernommen)
Insert('.hnc', datei_name, i);//fügt eine andere ein

Habe jetzt die Zeile mit dem Suchtext ermittelt, und durch den vorher zusammengesetzten String ersetzt.
ausblenden Quelltext
1:
2:
3:
for i := 0 to Memo1.Lines.Count -1 do
If Pos('Suchtext: ', Memo1.lines.Strings[i]) > 0 then
Memo1.Lines[i]:= datei_name;//fügt neue Zeile ein, andere wird gelöscht
Habe jetzt nur noch das Problem das der zu suchende Anfangstext unterschiedlich groß und klein geschrieben ist, manchmal sind es nur einige Zeichen, dann klappt es aber nicht.
Kann man mit "Pos" unberücksichtigt dieser schreibweise suchen?
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mo 20.12.04 05:07 
das ganze kannst du auch abkürzen...
codeteil 1:
ausblenden Quelltext
1:
datei_name:= 'Suchtext'+ copy(form1.Caption,1,pos('.',form1.caption)) + 'hnc';					

bei codeteil 2 musst du so vorgehen:
ausblenden Quelltext
1:
If Pos('SUCHTEXT: ', uppercase(Memo1.lines.Strings[i])) > 0 then					


ahja und bezüglich //keine ahnung wozu die 5 is
kann ich dur empfehlen den Cursor mal auf Delete zu bewegen und die Taste F1 zu drücken... dann weisst du warum
wisler Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 20.12.04 13:54 
Echt super: Der erste Teil ist jetzt viel kürzer und klappt.

Das mit dem uppercase geht leider nicht.
ausblenden Quelltext
1:
If Pos('SUCHTEXT: ', uppercase(Memo1.lines.Strings[i])) > 0 then					

In der Hilfe steht zwar <Die Groß/Kleinschreibung wird von Pos nicht berücksichtigt.>
Bei mir ist das aber nicht so.

Ich überleg schon die Zeilen einzeln in einen String zu kopieren, dort in groß zu wandeln und mit einem "großen" Suchtext zu vergleichen. Normal ist das wohl nicht...?! :shock:
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 20.12.04 14:32 
Die Delphi-Hilfe ist dort seit Jahren schon falsch. :mrgreen:

Wenn du auch Umlaute haben könntest, solltest du aber besser AnsiUpperCase benutzen. :wink:
wisler Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 20.12.04 15:18 
Jetzt geht es,

ausblenden Quelltext
1:
If Pos(AnsiUpperCase('Suchtext'), AnsiUpperCase(Memo1.lines.Strings[i])) > 0 then					


vielen Dank