Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - String auf einen bestimmten eintrag prüfen
Bronstein - Sa 13.03.04 17:44
Titel: String auf einen bestimmten eintrag prüfen
habe einen string (die Telefonnummer lautet: 2345). Jetzt möchte ich prüfen ob dieser String einen bestimmten eintrag besitzt.
Also wenn in dem String die Nummer 2345 steht soll es mir das per showmessage anzeigen. Ansosten soll es nichts tun
Moderiert von
Peter Lustig: Thema verschoben
BungeeBug - Sa 13.03.04 18:09
Hi,
einfach so :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure find_str(source , mask : string); begin IF pos(source,mask) <> 0 THEN BEGIN ShowMessage('String :'+mask+' an Position : '+IntToStr(Pos(source,mask))+' gefunden');# END; end; |
Bronstein - Mo 15.03.04 18:29
das funktioniert nicht
MaxiTB - Mo 15.03.04 19:13
Was soll da nicht funktionieren ?
Ist doch richtig ...
Ich denke mal, du solltest posten was du machst, wenn du schon sowas behauptest, weil bei so einem einfach Aufruf machst scheinbar du was falsch !
Hast du überhaupt schon mal reindebugt ? Was kommt als input (Übergabeparameter) / was liefert Pos ?
StefanH - Mo 15.03.04 20:46
es geht nicht, weil es
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure find_str(source , mask : string); begin IF pos(mask,source) <> 0 THEN BEGIN ShowMessage('String :'+mask+' an Position : '+IntToStr(Pos(source,mask))+' gefunden');# END; end; |
mask, source heißen muss.
Bronstein - Di 16.03.04 18:18
Wenn die Zahl in diesem string mehrmals vorkommt, soll er mir einen Zähler um eins erhöhen, bis jetzt sucht er nur ob die Zahl vorkommt, aber nicht wie oft.
dies ist ein Beispiel string:
Delphi-Quelltext
1: 2:
| var a :string; a := 'die Telefonnummer lautet: 2345 text 2345 text 2345' |
im hier genannten Beipiel kommt die Zahl drei mal vor, also soll der Zaehler auch auf drei gesetzt werden.
vielleicht hat jemand eine Idee wie ich das Lösen kann
Christian S. - Di 16.03.04 19:09
Hallo!
Schau Dir mal PosEx an. Damit geht das. Einfach die letzte Fundstelle plus Eins als Offset einsetzen.
MfG
Peter
Bronstein - Di 16.03.04 20:26
PosEx gibt es in meiner Delphi Hilfe nicht (Borland Delphi 6)
habe folgende Datei mit dem Inhalt:
Zitat: |
2;24.05.2003;1111111111;2;24.05.2003;1111111111;
2;24.05.2003;1111111111;2;24.05.2003;1111111111;
2;24.05.2003;1111111111;2;24.05.2003;1111111111;
2;24.05.2003;1111111111;2;24.05.2003;1111111111;
2;24.05.2003;1111111111;2;24.05.2003;1111111111;
2;24.05.2003;2222222222;2;24.05.2003;2222222222;
2;24.05.2003;2222222222;2;24.05.2003;2222222222;
2;24.05.2003;2222222222;2;24.05.2003;2222222222;
2;24.05.2003;2222222222;2;24.05.2003;2222222222;
2;24.05.2003;2222222222;2;24.05.2003;2222222222;
2;24.05.2003;3333333333;2;24.05.2003;3333333333;
2;24.05.2003;3333333333;2;24.05.2003;3333333333;
2;24.05.2003;3333333333;2;24.05.2003;3333333333;
2;24.05.2003;3333333333; |
Möchte jetzt immer den letzten Datensatz prüfen, ob die Serienummer 10 mal vorkommt, in diesem Beispiel ist dies der Fall bei den Serienummern 1111111111 und 2222222222.
Die 3333333333 kommt aber nur 7 mal vor, jetzt soll die Funktion alles mit der Serienummer 3333333333 löschen und die Serienummer 2222222222 speichern in einer Stringvariable spreichern
Christian S. - Di 16.03.04 20:32
Ob das in Delphi 6 noch nicht dabei ist, weiß ich leider nicht. Zur Not musst Du Dir eine solche Funktion selbst schreiben. Aber das ist ja auch nicht soooo schwer.
Zitat: |
Die 3333333333 kommt aber nur 7 mal vor, jetzt soll die Funktion alles mit der Serienummer 3333333333 löschen und die Serienummer 2222222222 speichern in einer Stringvariable spreichern |
Entschuldigung. Ich verstehe leider nicht ganz, was Du meinst ... :?
Bronstein - Di 16.03.04 20:45
Wenn eine Serienummer nicht 10 mal in der Datei vorkommt soll diese herrausgelöscht werden, da in diesem Beipiel die 3333333333 nicht 10 mal vorkommt sondern nur 7 mal soll das gelöscht werden also alle Zeilen mit der 3333333333 gelöscht werden.
Christian S. - Di 16.03.04 21:02
:think: Ah!
Sind die immer so Blockweise abgelegt, oder kann es sein, dass die verschiedenen Seriennummern gemischt sind?
Bronstein - Di 16.03.04 21:16
Die Serienummer sind nicht gemischt, habe die Blockweise oben nochmal verdeutlicht(siehe oben)
Christian S. - Di 16.03.04 21:31
Und so etwas kann auch nicht vorkommen?
Zitat: |
2;24.05.2003;2222222222;2;24.05.2003;2222222222;
2;24.05.2003;2222222222;2;24.05.2003;3333333333;
2;24.05.2003;3333333333;2;24.05.2003;3333333333; |
Dann folgender Vorschlag:
1. Du liest die Datei in eine TStringList ein, so dass die Zeilen einzeln vorliegen
2. Die korrekte Anzahl an Nummern kann es nur geben, wenn bei fünf Zeilen in Folge die Nummer gefunden wird (einfach es Pos())
3. Man muss noch herausfinden, ob in der letzten Zeile auch wirklich zwei Nummern stehen. Das macht man am Besten über eine Längenabfrage.
Dann weißt Du schonmal, ob eine Nummer oft genug vorkommt. Wenn nicht, mit TStringList.Delete die betreffenden Zeilen löschen.
Bronstein - Di 16.03.04 21:53
den passenden code hast nicht zufällig jemand.
Christian S. - Di 16.03.04 21:55
Schreib' ihn doch selber und wenn Du nicht weiter kommst, dann fragst Du hier nach. :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!