Vorkommen und Position eines Zeichens im Text ermitteln

Hallo,

hab mal wieder einen Knoten im Hirn;-)
Ich will eine Kombination aus 0 und 1 in A, B, C usw. per Formel umwandeln, wobei eigentlich nur die Position der 1en in der Kette brauch um den entsprechenden Buchstaben zu finden.

Probiere es die Ganze Zeit mit finden('1';), aber da die Länge der Kette von 0en und 1en nicht immer gleich ist, komm ich nicht weiter.

Geht das überhaupt mit RT? Ich müsste quasi eine Schleife programmieren können.

Zum Hintergrund:
Habe mehrere Fragen (so ca. 300) mit jeweils unterschiedlich vielen Antworten, dazu die jeweils richtigen und falschen Antworten in Form des o.g. Schlüssels, wobei 0 für Falsch und 1 für Richtig steht. Per Knopf möchte ich nun die richtigen Antworten in der Form A, B, C usw. ein und ausblenden.

Bislang musste ich das händisch übertragen, wird mir aber zu viel, da immer mehr Fragen dazu kommen.

Ob mir jemand Helfen kann? Oder auch nur sagt, dass es nicht geht, damit ich den Kopf wieder frei bekomm;-)

Gruß
Martin

Re: Vorkommen und Position eines Zeichens im Text ermitteln

#9671 On 26 Juli, 2010 14:19 Bernhard Storch said,

Hallo Martin,

Vielleicht hilft dir folgende Formel (im Beispiel für maximal 5 Antworten):
Wenn(Teil(A1;1;1)=1;'A';'')&Wenn(Teil(A1;2;1)=1;'B';'')&Wenn(Teil(A1;3;1)=1;'C';'')&Wenn(Teil(A1;4;1)=1;'D';'')&Wenn(Teil(A1;5;1)=1;'E';'')

Gruß, Bernhard Storch

Re: Vorkommen und Position eines Zeichens im Text ermitteln

#9672 On 26 Juli, 2010 22:11 Martin Berlin said,

Hallo Bernhard,

Danke für die Anregung. Da muss ich die Treffer nur verketten und die Lösung darf nicht länger als 5 Stellen haben. O. K., bin da aber auf etwas gestoßen, wenn ich meine Formel etwas verändere und in einen erzeugten Knopf schreibe...aber vielleicht gehts ja auch nur mit Deiner Idee, mit der Funktion 'Teil', oder in Kombination, aber irgendwie muss es gehen.

Wenn ich die Lösung hab, setze ich sie hier rein.

Gruß
Martin

Re: Vorkommen und Position eines Zeichens im Text ermitteln

#9667 On 25 Juli, 2010 21:09 Tom Kaegi said,

Hallo Martin

Leider ist deine Beschreibung für mich nicht klar. Wie sind die Antworten (1/0) zu den 300 oder so Fragen angeordnet? Pro Frage je 1 Spalte und pro Antwort je 1 Zelle? Oder sind die 1 und 0 in Textstrings? Und was für ein Resultat soll die Formel liefern? Die Anzahl 1 pro Frage, oder pro Antwortendem, oder was sonst? Bitte beschreib präziser.

Gruß, Thomas

Re: Vorkommen und Position eines Zeichens im Text ermitteln

#9670 On 25 Juli, 2010 22:29 Martin Berlin said,

Hab noch vergessen:
RagTime 5.6.5 auf WinXP ohne Martin Power oder so;-) (da seh ich ja Schwarz)
Martin

Re: Vorkommen und Position eines Zeichens im Text ermitteln

#9669 On 25 Juli, 2010 22:22 Martin Berlin said,

Hallo Thomas,
sorry, wenn ich mich unverständlich ausgedrückt habe. Hier ein Beispiel:
1. Frage: Welche der folgenden Aussagen treffen zu:
+ Antwort1
+ Antwort2
+ Antwort3
+ Antwort4

0110 (Lösungsschlüssel)

Bisher hab ich den Lösungsschlüssel in ein separates Rechenblatt übersetzt und über einen Knopf in der Zeile der Frage ein- oder ausgeblendet. Die Nummer vor der Frage ist der Index zur Lösung.
Im Lösungsblatt hab ich auch eine Spalte mit Buchstaben und so könnte die Position der 1 im Lösungsschlüssel, der Index zum Buchstaben in der Lösungsspalte sein. Bei nur einer richtigen Antwort, oder wenn die Letzte die Erste richtig ist, klappt meine Formel:

Wenn(Finden('1';L3)=Länge(L3);SetzeZelle(Index(RB__Lösungen!$L:$L;Länge(L3));P3);Wenn(Finden('1';L3;Finden('1';L3)+1)>0;SetzeZelle(Index(RB__Lösungen!$L:$L;Finden('1';L3))&',';P3);SetzeZelle(Index(RB__Lösungen!$L:$L;Finden('1';L3));P3)))

zur Erklärung: in L3 steht der Lösungsschlüssel und P3 dient der Probe zur Anzeige. In RB_Lösungen stehen die Buchstaben.

Siehst Du meinen Knoten im Kopf;-), oder geht das einfach nicht, oder nur nicht so?

Danke für Dein Interesse.
Gruß
Martin

Re: Vorkommen und Position eines Zeichens im Text ermitteln

#9677 On 29 Juli, 2010 10:49 Thomas Kaegi said,

Martin und ich haben das Problem im direkten Kontakt genauer analysiert. Das Resultat ist als spezielle Anwendung eines Suchlaufs für das Forum interessant.

Ich will eine Kombination aus 0 und 1 in A, B, C usw. per Formel umwandeln, wobei eigentlich nur die Position der 1en in der Kette brauch um den entsprechenden Buchstaben zu finden.

Probiere es die Ganze Zeit mit finden('1';), aber da die Länge der Kette von 0en und 1en nicht immer gleich ist, komm ich nicht weiter.

Geht das überhaupt mit RT? Ich müsste quasi eine Schleife programmieren können.

Richtig: Ein Schleife programmieren! Drei Mal raten wie das geht? Natürlich mit einem Suchlauf!

Die Ausgangslage ist wie folgt: Im Rechenblatt, Spalte A, gibt es nummerierte Fragen, leere Zellen und Zellen mit den umzuwandelnden binären Zeichenfolgen (also nur 0 und 1) unterschiedlicher Länge. Die Inhaltsart aller Zellen in Spalte A ist mit "Text" definiert - sonst würden ja führende Nullen der binären Zeichenfolgen unterdrückt. Die binären Zeichenfolgen sollen in Spalte N in Buchstabenfolgen umgewandelt werden. Für jede 1 in der binären Folge soll das entsprechende Zeichen in der Buchstabenfolge stehen, für eine 1 an erster Position ein A, an zweiter Position ein B etc. Die binäre Folge 0101 soll demnach in BD gewandelt werden.

Die folgende Formel (sie kann irgendwo im Rechenblatt stehen, z.B. in Zelle N1, wenn davon ausgegangen wird, dass auf Zeile 1 kein umzuwandelnder Wert steht) besteht aus einem äusseren Suchlauf, der dafür verantwortlich ist, die Zeilen mit den binären Zeichenfolgen zu finden, und dem inneren, der die binären Folgen umwandelt. Die Formel funktioniert für binäre Zeichenfolgen von maximal 26 Stellen.

VSuchlauf(A:A;Und(LfdZelle≠''; NICHT IstFehl(Wert(LfdZelle)));0;
SetzeZelle(VSuchlauf(A1:A26;Teil(LfdZelle(1);LfdIndex;1);'';
LfdResultat&Zeichen(Code('A')-1+LfdIndex);LfdIndex=Länge(LfdZelle(1)));N:N;LfdIndex))

Erläuterung:

Der äussere Suchlauf läuft über Spalte A. Die Suchbedingung ist erfüllt, wenn die laufende Zelle nicht leer ist UND ihr Inhalt ohne Fehler in eine Zahl umgewandelt werden kann. Als Folgewert wird mit SetzeZelle der Wert des inneren Suchlaufs auf der betreffenden Zeile in Spalte N eingesetzt.

Der Suchbereich des inneren Suchlaufs ist bedeutungslos - er definiert lediglich, dass die Schlaufe bis zu 26 Mal (= Anzahl Buchstaben im Alfabet) durchlaufen werden soll. Die Suchbedingung ist erfüllt, wenn in der binären Zeichenfolge (= LfdZelle des äusseren Suchlaufs) an der n-ten Position (n = LfdIndex = n-ter "Suchschritt") eine 1 steht. Der Anfangswert ist ein "Nulltext". Folgewert: Jedes Mal, wenn die Suchbedingung erfüllt ist, d.h. an der betreffenden Position eine 1 steht, wird dem LfdResultat der Buchstabe hinzugefügt, der dem Suchschritt entspricht (Zeichen(Code('A')-1+LfdIndex). Die Schlaufe wird abgebrochen, wenn alle Zeichen der binären Folge analysiert sind, d.h. der LfdIndex der Länge der Folge entspricht.

Sollen zwischen den Buchstaben noch andere Zeichen eingefügt werden, z.B. ein Komma, ein Leerzeichen, oder Komma+Leerzeichen, so muss die Formel für den Folgewert des inneren Suchlaufs ergänzt werden, z.B. für Komma+Leerzeichen:

Verbinden(', ';LfdResultat;Zeichen(Code('A')-1+LfdIndex))
oder
LfdResultat&Wenn(LfdZähler>1;', ')&Zeichen(Code('A')-1+LfdIndex)

Für nur ein Leerzeichen genügt:

LfdResultat&&Zeichen(Code('A')-1+LfdIndex)

Gruss, Thomas Kaegi
ragtime-consult.ch

Thomas

Re: Vorkommen und Position eines Zeichens im Text ermitteln

#9679 On 31 Juli, 2010 14:06 Martin Berlin said,

Hallo Thomas,

recht herzlichen Dank für diese ausführliche Antwort und die Lösung meines Problems. Darauf wäre ich NIEMALS alleine gekommen! Dass man eine Schleife mit Hilfe von VSuchlauf programmieren kann hatte ich vermutet, wusste aber nicht wie. Der Nutzen von 'Schachtelungsebene' der Laufenden Zelle war mir bis dato auch nicht klar, denn bislang hatte ich diese Funktionalität auch noch nicht benötigt.

Deine Formel werde ich meinen Bedürfnissen anpassen und Dir das Ergebnis mitteilen. Vielleicht wäre dieses Thema auch eine Bereicherung für eine Info-Mail?

Ich hoffe, es wird meine Lehrgangsteilnehmer begeistern;-)

Gruß
Martin

Re: Vorkommen und Position eines Zeichens im Text ermitteln

#9680 On 1 August, 2010 10:10 Andreas Loos said,

Martin und Thomas, moin ,moin,

eine Schleife in RagTime zu programmieren wäre auch für mich höchst interessant. Ich habe so etwas schon für mathematische Iterationen gemacht. Aber für textliche Zusammenhänge kann ich mir das gar nicht vorstellen. Also Martins Anregung: das ist eine Bereicherung für das Forum oder die Info-Mail.

Schon einmal herzliche Dank.

Andreas Loos