Autor Thema: Teilstring auslesen bzw ausschneiden  (Gelesen 7864 mal)

Offline markus76

  • Frischling
  • *
  • Beiträge: 15
Teilstring auslesen bzw ausschneiden
« am: 04.12.14 - 17:35:24 »
Guten Abend

Könnt ihr mir sagen wie ich einen Teilstring auslesen bzw. Auschneiden kann? Ich habe einen Text und in diesem Text befindet sich an verschiedenen Stellen Text in Spitzige Klammern,

Beispiel: hallo <strong> es gibt </strong> vies zu machen <bla bla> legen wir .....

nun möchte ich den Text in der ersten Klammer (<strong>) ausgeben, dann den Text in der zweiten Klammer usw. Leider habe ich keine Ahnung wie ich dem Programm sage, dass er den Teil von der < Klammer bis zu der > Klammer ausgeben soll.

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Teilstring auslesen bzw ausschneiden
« Antwort #1 am: 04.12.14 - 17:44:06 »
Moin

Script oder Formel ?
Strleft$ / StrRight$ oder @Middle ?
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline markus76

  • Frischling
  • *
  • Beiträge: 15
Re: Teilstring auslesen bzw ausschneiden
« Antwort #2 am: 04.12.14 - 17:48:14 »
sorry das habe ich vergessen mitzuteilen. Es ist Lotuscript und sollte im Agent als Funkion aufgerufen werden können

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Teilstring auslesen bzw ausschneiden
« Antwort #3 am: 04.12.14 - 18:18:45 »
... und sollte im Agent als Funkion aufgerufen werden können

Diese Funktion musst Du Dir selber schreiben.
Für den Anfänger: Brutalstmöglich Zeichen für Zeichen von links nach rechts durch den String Zeichen für Zeichen durchloopen und den Teil von "<" bis ">" als Ergebnis in ein dynamisches Resultarray schreiben. Dann weiter im Text, nächstes Vorkommen: Resultarray erweitern. Ende Gelände: Resultarray als Ergebnis der Function zurückgeben.
Für den Routinier: Der macht das mit zwei Functions und macht das rekursiv und mit API-naheren Functions solange, bis vom Ursprungsstring nix mehr übrig ist.

Nun ist Dein Gehirnschmalz gefragt. Dafür wirst Du ja auch offensichtlich bezahlt.

Bernhard

Offline markus76

  • Frischling
  • *
  • Beiträge: 15
Re: Teilstring auslesen bzw ausschneiden
« Antwort #4 am: 04.12.14 - 18:32:24 »
Dank für die Anzwort. soweit war ich schon  ;) Aber es happert beim Syntax. Und ausserdem bin ich blutiger Anfänger und gerade richtig überfordert  :-[

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Teilstring auslesen bzw ausschneiden
« Antwort #5 am: 04.12.14 - 18:41:55 »
Dann benutzte doch die hervorragende Designer-Hilfe. Dort sind alle alle LotusScript-Befehle genau erläutert, auch mit der Syntax. Pampern werden wir Dich bei dieser einfachen Sache nicht.

Bernhard

Offline markus76

  • Frischling
  • *
  • Beiträge: 15
Re: Teilstring auslesen bzw ausschneiden
« Antwort #6 am: 04.12.14 - 18:56:40 »
pampern????? ich versteh den instr Befehl nicht.Weiss aber leider auch nicht wie ich dem Programm sage dass es nur von < bis> ausgeben soll

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Teilstring auslesen bzw ausschneiden
« Antwort #7 am: 04.12.14 - 19:29:27 »
Wenn Du die Instr-Function schon nicht verstehst, hast Du ein sehr grosses Problem. Hinzu kommt: Diese ist nur ein atomarer Teil der benötigten LotusScript-String-Funktionen ...

Pampern: Verhätscheln, verwöhnen.

Bernhard

Offline markus76

  • Frischling
  • *
  • Beiträge: 15
Re: Teilstring auslesen bzw ausschneiden
« Antwort #8 am: 04.12.14 - 19:50:51 »
ich arbeite schliesslich erst drei wochen mit Notes. Wenn ich es wüsste würde ich nicht hier nachfragen müssen...
ich weiss das du mich nicht verwöhnst ich habe eher das Gefühl verhöhnt zu werden  :-\

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Teilstring auslesen bzw ausschneiden
« Antwort #9 am: 04.12.14 - 21:15:06 »
Was hat das mit "verhöhnen" zu tun, wenn man lediglich eine Antwort à la "Ich verstehe den instr Befehl nicht" hingeworfen bekommt? Was ist daran nicht zu verstehen?
Instr ("markus76", "76") gibt als Ergebnis 7, den die gesuchte Zeichenkette "76" wurde ab dem 7. Zeichen gefunden. DAS macht Instr - nicht mehr und nicht weniger.
Und so steht das auch in der DesignerHelp. Kurz, knapp, prägnant und ohne Prosa. Dazu ein Beispiel in der Art wie von mir oben geschrieben. Und wenn man DAS nicht versteht, dann hat man wirklich ein Problem (mit der Programmiererei an sich), weil einem diese Denke völlig abgeht. Das ist nicht schlecht, die Fähigkeiten liegen dann woanders.

Und was sollen wir jetzt machen, wenn Du ein Problem mit Instr hast, aber auf Deinem Weg Mid$, Left$, Right$, StrLeft, StrRight, StrLeftBack, StrRightBack und Konsorten brauchst?

Vermutlich ist Dein problem aber vorrangig ein anderes: Du kannst keine Fragen stellen. Eigentlich müsstest Du ja äussern "Ich verstehe bei Instr nicht, was ... bedeutet". Oder Du hast Probleme mit dem Lesen, denn hier steht schon seit etlichen Posts, dass Instr alleine die Aufgabe nicht erfüllen kann (aber notwendig ist).

Ich würde sagen: Your turn - and next try. Ich bin jedenfalls (noch) dabei. Mühe musst *Du* Dir aber auch geben. Andere (mich eingeschlossen) haben Dir immerhin schon Lösungswege aufgemalt. Und fertige Lösungen gibt es hier de facto prinzipiell nicht.

Bernhard

PS: Das waren 1429 Tastenanschläge. Sage nicht, dass man sich heir keine Mühe gibt. Und meiner Selbstdarstellung oder einem anderen Egotrip haben die nicht gegolten - garantiert nicht. Das habe ich wirklich nicht nötig. Wir sind hier, weil wir helfen wollen, und dafr können wir verlangen, dass die Frager mitdenken und vor allem ordentlich Fragen stellen (was wir denken voraussetzt).

Offline markus76

  • Frischling
  • *
  • Beiträge: 15
Re: Teilstring auslesen bzw ausschneiden
« Antwort #10 am: 04.12.14 - 21:40:07 »
lieber Berhard, ich wollte dich weder kritisieren noch beleidigen. Ganz und gar nicht. Ich weiss auch, dass du dich sehr gut auskennst (sieht man wenn ich deine Posts lese). Ich bin hier recht neu und weiss dass ich die Fragen falsch formuliere das tut mir sehr leid. Ich bitte dich persönlich vielmals um Entschuldigung. Mein Problem ist: ich weiss was der Agent tun soll, er soll nachden er den Bigstring ausgelesen hat die Funktion aufrufen. Diese geht dann den String durch und sucht die erste Klammer <. Dann geht er weiter und sucht die Erste >. und dann soll er mir diesen Teilstring ausgeben (zB: msgBox). Diese Aufgabe ist mir leider noch viel zu hoch. Aber eine Lösung muss trotzdem her  :-[. Und da hier viele Fähige Leute sind die perfekt Lotuscriüt sprechen wende ich mich in der Hoffnung auf Hilfe an euch. Ich weiss das ich vielleicht blöde Frage stellen, aber ich will lernen und wenn eines Tages so eine Frage hier kommt werde ich dem auch helfen können so wie man mir helfen konnte  ;)
ich weiss nicht wievile Tastenschläge ich habe, aber es war mein Ernst was ich hier geschrieben habe.
Liebe Grüsse aus Bern
Markus
« Letzte Änderung: 04.12.14 - 21:45:43 von markus76 »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Teilstring auslesen bzw ausschneiden
« Antwort #11 am: 04.12.14 - 22:22:17 »
Hallo Markus und viele Grüsse nach Bern,

alles ist gut und wir machen hier schon noch weiter. Wir müssen vielleicht langsamer vorgehen (und trotzdem auch ansagen: Wenn das immer wieder im Nirwana endet, dann hat es eben doch keinen Sinn; manche können programmieren (sie haben "die Denke" dafür) und andere tolle Bilder malen oder singen (ich kann weder singen noch malen - mit "Singen" könnte man mich höchstens im Krieg als Massenvernichtungswaffe einsetzen).

Eine Aufgabe:
Suche mit Instr das erste Vorkommen von "<" und lass Dir das ausgeben. suche das erste ">" und lass Dir das auch ausgeben. Jetzt hast Du zwei Positions für Anfang und Ende Deines gesuchten Teilstrings. Statt der Ausgabebox kannst Du Dir ja nun auch diese Werte in Variablen übernehmen:

Ein Beispielcode, den Du unbedingt Zeile für Zeile nachvollziehen und i nder DesignerHelp nachvollziehen solltest (für mich ist das jetzt Deine Nagelprobe!):

Code
	Dim strGiven As String
	Dim intFirstDelimiterStart As Integer
	Dim intFirstDelimiterEnd As Integer
	Dim strPlaceHolder As String
	
	strGiven = "Das ist <mein> Texttext"
	intFirstDelimiterStart  = Instr (strGiven, "<")
	intFirstDelimiterEnd = Instr (strGiven, ">")
	
	Messagebox Cstr (intFirstDelimiterStart) & Chr$ (10) & Cstr (intFirstDelimiterEnd),, strGiven
	
	strPlaceHolder = Mid$ (strGiven, intFirstDelimiterStart + 1, intFirstDelimiterEnd - intFirstDelimiterStart - 1)
	
	Messagebox strPlaceHolder

Beschreibe, was hier warum passiert. Dann kannst Du auch verstehen, was da im erstenSchritt abgeht (in Deinem Lernprozess). Und beachte bitte ungedingt: Das ist der ANFANG. Das hilft Dir nicht bei
"<Salutation> <FirstName> <"LastName>, wir übersenden Ihnen hiermit wie angefordert unseren Geschäftbericht für das Quartal <LastYby4>/<Year>"

Aber das ist schon mal ein Anfang, den Du erst begreifen musst. Wenn *das" sicher klappt, können wir uns an dne nächsten Schritt wagen. Sowie einer von uns dafür Zeit hat, aber das dürfte klar sein.

Bernhard

Offline markus76

  • Frischling
  • *
  • Beiträge: 15
Re: Teilstring auslesen bzw ausschneiden
« Antwort #12 am: 04.12.14 - 22:50:15 »
Vielen Dank Berhard Also was ich sehe:
        Dim strGiven As String
   Dim intFirstDelimiterStart As Integer
   Dim intFirstDelimiterEnd As Integer
   Dim strPlaceHolder As String
Variablen deklarieren als String (Zeichen kette) oder als (Integer)Zahlwert Ganze Zahlen

        strGiven = "Das ist <mein> Texttext"    'strGiven Variable den wert zuweisen
   intFirstDelimiterStart  = Instr (strGiven, "<") ' in String die Position des Zeichens suchen
   intFirstDelimiterEnd = Instr (strGiven, ">")   ' in String die Position des Zeichens suchen

Messagebox Cstr (intFirstDelimiterStart) & Chr$ (10) & Cstr (intFirstDelimiterEnd),, strGiven
Position des Zeichens  intFirstDelimiterStart  (int) als String ausgeben
   & Chr$ (10) & Dieser Chr$ kenne ich nicht ist das ein Leerzeichen?
Position des Zeichens  intFirstDelimiterEnd  (int) als String ausgeben

   strPlaceHolder = Mid$ (strGiven, intFirstDelimiterStart + 1, intFirstDelimiterEnd - intFirstDelimiterStart - 1)
Diesen Befehl Mid$ kenne ich noch nicht.   
   Messagebox strPlaceHolder
MessageBox mit dem wert der Variable strPlaceHolder


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Teilstring auslesen bzw ausschneiden
« Antwort #13 am: 04.12.14 - 23:18:06 »
Vielen Dank Berhard Also was ich sehe:
        Dim strGiven As String
   Dim intFirstDelimiterStart As Integer
   Dim intFirstDelimiterEnd As Integer
   Dim strPlaceHolder As String
Variablen deklarieren als String (Zeichen kette) oder als (Integer)Zahlwert Ganze Zahlen

        strGiven = "Das ist <mein> Texttext"    'strGiven Variable den wert zuweisen
   intFirstDelimiterStart  = Instr (strGiven, "<") ' in String die Position des Zeichens suchen
   intFirstDelimiterEnd = Instr (strGiven, ">")   ' in String die Position des Zeichens suchen

Messagebox Cstr (intFirstDelimiterStart) & Chr$ (10) & Cstr (intFirstDelimiterEnd),, strGiven
Position des Zeichens  intFirstDelimiterStart  (int) als String ausgeben
   & Chr$ (10) & Dieser Chr$ kenne ich nicht ist das ein Leerzeichen?   Falsches Herangehen - nachlesen! Das ist ein normaler ASCII-Coe. Es hilft notfalls ja auch Ausprobieren ;-) Es bewirkt eine Zeilenschaltung.
Position des Zeichens  intFirstDelimiterEnd  (int) als String ausgeben

   strPlaceHolder = Mid$ (strGiven, intFirstDelimiterStart + 1, intFirstDelimiterEnd - intFirstDelimiterStart - 1)
Diesen Befehl Mid$ kenne ich noch nicht.   In der DesignerHelp nachlesen! Und ausprobieren!
   Messagebox strPlaceHolder
MessageBox mit dem wert der Variable strPlaceHolder

Gestatte mir bitte noch eine Frage (und bitte missverstehe diese nicht): Deutsch ist nicht Deine Muttersprache, oder? Wo kommst Du her? Ich möchte das nur einordnen und darauf entsprechend eingehen  (und wiederkehrende Schreibfehler nicht missverstehen). Ich pflege und lebe hier ein sehr internationales Heim. Traditionell wird insbesondere der Heiligabend hier wieder der Tag des babylonischen Sprachgewirrs: Mein Sohn telefoniert mit der Freundin und ihren Eltern in Litauen - und dem Vater seiner Exfreundin in der Slowakei (englisch - litauisch  -slowakisch), der Ich mit Freunden in UK (darunter ein Pakistaner, Urdu kann ich aber gar nicht) und mit Freunden aus der Ukraine und Russland und Abchasien und vor allem Dänemark (Russisch und Dänisch funktioniert soweit,dass ich nicht verhungern würde), meine Tochter auch mit einer Freundin aus UK, meine Lieblingsfrau nach Tschechien und Frankreich (okay, ich auch ;-)

Fazit: Die erste Aufgabe ist schon mal von Dir ausreichend erfüllt.
Nun Deine weiteren Fragen, und morgen stehen der Ich und andere wieder für Deine Fragen (arbeite daran!) bereit. Inmeinem Fall aber frühestens nach Feierabend und vielleicht am Wochenende - abhängig auch von Deinen Resultaten.

Bernhard

Bernhard

Offline markus76

  • Frischling
  • *
  • Beiträge: 15
Re: Teilstring auslesen bzw ausschneiden
« Antwort #14 am: 05.12.14 - 10:35:59 »
Guten Morgen. also das Chr$(10) ist ein Zeilenumbruch. und die Mid$ Funktion liest den Wert zwischen dem Start- und Enzeichen aus. So weit sieht das ja schon super aus  ;). Jetz muss ich noch den loop machen damit er mir alle Teile in den Spitzigen Klammern ausliest. Zu deiner Frage, ja Deutsch ist irgendwie meine Muttersprache aber mein Dialekt hat zum Teil starke grammatische Abweichungen zum richtigen Deutsch.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Teilstring auslesen bzw ausschneiden
« Antwort #15 am: 05.12.14 - 11:41:09 »
Ich möchte Dich ungern verwirren, aber ich würde da etwas anders herangehen. Sollte in dem Text eine Klammer als Text stehen, fällst Du auf die Nase. Beispiel:

Dies ist ein Text mit > und <Wert>

Instr (text, ">") liefert Dir, wenn ich mich nicht verzählt habe, 23
Instr (text, "<") liefert 29

Mid$ (strGiven, intFirstDelimiterStart + 1, intFirstDelimiterEnd - intFirstDelimiterStart - 1) ergibt dann
Mid$ (text, 29+1, 23-29-1) -> Mid $ (text, 30, -7)

Einfacher ist es m.E., den Text über die öffnende Klammer in ein Array zu verwandeln. Dazu gibt es die Function Split

Beispieltext: Dies ist ein Text mit > und <Wert1> und < und <Wert2> bla bla

Diesen Text zerlegst Du nun in ein Array, indem Du ihn über die öffnende Klammer splittest (Function Split).
Das Array durchläufts Du dann Element für Element und ersetzt den Inhalt durch den Teil , der links von der schließenden Klammer steht. Gibt es keine schließende Klammer, wird das Element dadurch leer.

Abschließend killst Du mit Fulltrim die leeren Elemente des Arrays. Zur Ausgabe (Msgbox) wandelst Du das Array wieder in einen Text um, das muss aber nicht zwingend in Deiner Routine sein, denn dort wirst Du mit dem Array weiterarbeiten.

Jetzt gibt es noch eine Kleinigkeit zu beachten. Es könnten falsche Klammern im Text vor dem ersten und/oder hinter dem letzten korrekten Wert eingetragen sein. Um das auszuschließen, würde ich vor und nach den Text eine Markierung anbringen, die normalerweise nicht in dem Text vorkommt, und nach dem Aufteilen des Strings und Ermitteln der Elemente das erste Element entfernen, wenn der Inhalt mit der Markierung beginnt. Ebenfalls löschst Du das letzte Element, wenn es mit der Markierung endet.

Anbei der funktionierende Code

Code
Sub Initialize
	'Const teststring = "Dies ist ein Text mit > und <Wert1> und < und <Wert2> bla bla"
	Const teststring = "> und <<Wert1>> und << und <<Wert2<x>"
	Const markierung = "###"
	Dim meintext As String
	meintext = markierung & teststring & markierung
	Dim tmparray As Variant
	tmparray = Split (meintext, "<")

	ForAll ta In tmparray
		ta = StrLeft (ta, ">")
	End ForAll
	If Left (tmparray (0), Len (markierung)) = markierung Then
		tmparray (0) = ""
	End If
	If Right (tmparray (UBound (tmparray)), Len (markierung)) = markierung Then
		tmparray (UBound (tmparray)) = ""
	End If
	tmparray = FullTrim (tmparray)
	MsgBox Join (tmparray, Chr (10))
End Sub



 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz