Daub Logo
Produkte Downloads Kaufen Company Community mein Daubnet
Anmelden

Community

Diskussionen, Fragen und Zusammenarbeit - hier ist der richtige Platz für den Austausch mit den Entwicklern und mit anderen Usern. Machen Sie mit!
Kostenloses Daubnet-Konto erstellen

Ages! Forum Rechenfelder Formel um Teil eines Strings (Zahl) zu extrahieren?  


 

Formel um Teil eines Strings (Zahl) zu extrahieren?

 
 
 
Beitrag18. Okt 2010, 20:50
Ich sitze nun einige Zeit um folgende Aufgabe zu lösen: ich möchte aus dem IDNO.TYPE(ID-Nr.)-Feld den Teil des eingegeben Wertes herausholen, der mich interessiert. Typische Beispiele des Feldinhaltes (innerhalb ""):
  • "CR-Kek-256,278,344"
  • "CR-Kek-1024"
  • "" (nichts)
Aus diesem Inhalt möchte ich die erste Zahl nach "CR-Kek-" extrahieren, d.h. in den obigen Beispielen: "256","1024","".
Ich habe nun folgendes "Monstrum "dazu konstruiert, welches die obige Aufgabe löst:
Code: Alles auswählen
=IF(FIND("CR-Kek-",IDNO.TYPE)>0,MID(IDNO.TYPE,SEARCH("$",SUBSTITUTE(IDNO.TYPE,"CR-Kek-","CR-Kek$",1))+1,IF(FIND(",",IDNO.TYPE)>0,SEARCH("$",SUBSTITUTE(IDNO.TYPE,",","$",1)),LEN(IDNO.TYPE)+1)-SEARCH("$",SUBSTITUTE(IDNO.TYPE,"CR-Kek-","CR-Kek$",1))-1),"")

Die Formel ist mehr als 256 Zeichen lang (scheint die Grenze in Ages v1.53 zu sein) und daher werden die letzten drei Zeichen abgeschnitten, trotzdem funktioniert sie scheinbar.
Leider fehlt mir die Erfahrung mit den Excel-Basic-Funktionen um das ganze 1.) eleganter und 2.) so zu lösen, dass auch folgende Feldinhalte keine Probleme bereiten (in Klammer das gewünschte Resultat aus der Formel):
  • "Number-X-234, CR-Kek-256,278,344, Stamm-R-Sar-466" ("256")
  • "Number-X-234; CR-Kek-256,278,344; Stamm-R-Sar-466,534" ("256")
  • "Number-X-234,288 CR-Kek-256,278,344 Stamm-R-Sar-466" ("256")
  • "Number-X-234 CR-Kek-256 Stamm-R-Sar-466" ("256")
  • "CR-Kek-1024,1468; Stamm-R-Sar-356" ("1024")

Danke für jede Hilfe der Besserung!
Zuletzt geändert von ChristianR am 23. Okt 2010, 10:28, insgesamt 1-mal geändert.

Ages! 2 - Gutes Forschen und viel Erfolg! Prioritäten: Standards (GEDCOM Export/Import), Datensicherheit, Quellen und Publizierbarkeit. Über 18.000 Personen. Win7x64 4 GB RAM. Meine Ages Erfahrungen und Wunschliste - CRα
 
 
 

Re: Formel um Teil eines Strings (Zahl) zu extrahieren?

Beitrag22. Okt 2010, 15:37
Hallo,
grundsätzlich könnte ich mir eine einfachere Formel vorstellen, aber das werde ich erst einmal probieren.

ok. Ich denke, so geht es:

Code: Alles auswählen
=TRIM(MID(IDNO.TYPE,FIND("CR-Kek-",IDNO.TYPE)+7,FIND(".",IDNO.TYPE&".")-FIND("CR-Kek-",IDNO.TYPE)-7)


Die Konstante 7 in dieser Formel entspricht der Anzahl der Zeichen in der FIND-Anweisung, die Verlängerung IDNO.TYPE&"." sichert zu, dass der abzusuchende String mit einem solchen Zeichen endet. Voraussetzung ist allerdings, dass die gesuchte Nummer mit einem Punkt endet oder diese Angabe das Ende des Strings ist.
Wenn zu einer Person keine IDNO gespeichert ist oder diese den String CR-Kek- nicht enthält, ist das Ergebnis ein leerer String, eine besondere Abfrage ist dazu nicht erforderlich.
 
 
 

Re: Formel um Teil eines Strings (Zahl) zu extrahieren?

Beitrag23. Okt 2010, 14:01
Danke für diese eindeutig bessere und kürzere Lösung! (N.B.: Hinten braucht es noch eine Klammer obwohl kein Syntax-Error kommt?!) Ich habe anstatt dem Punkt das Komma "," genommen, da ich die Struktur der Nummer nicht ändern möchte. Ich möchte überhaupt eine Konditionierung der Nummernvergabe durch die Formel vermeiden. Insbesondere suche ich abgesehen von meinen reinen Vorfahren (Kekule) noch nach einer Möglichkeit der eindeutigen Nummerierung für verwandte und verschwägerte Personen. Hierzu vielleicht nach besserer Recherche noch ein Verweis. Bei den Excel-Formeln bräuchte es eine Möglichkeit alles nach dem String "CR-Kek-" bis zu nächsten Komma; Semikolon oder Leerzeichen zu extrahieren. Ohne die Möglichkeit von Variablen, wird dies wohl schwer möglich sein. Eine Möglichkeit wäre auch andere ID-Nummern in weitere Felder auszulagern, d.h. nie zwei verschiedene Ordnungsstrukturen im gleichen Feld einzugeben; andererseits leidet der Eingabe/Übersichtscharakter in der Datenbank etwas darunter.
Zu Excel-Formeln hier einige interessante Links:
Text and Data Functions
Split text among columns by using functions
An Excel user defined function to extract characters from text
Zuletzt geändert von ChristianR am 23. Okt 2010, 19:12, insgesamt 1-mal geändert.

Ages! 2 - Gutes Forschen und viel Erfolg! Prioritäten: Standards (GEDCOM Export/Import), Datensicherheit, Quellen und Publizierbarkeit. Über 18.000 Personen. Win7x64 4 GB RAM. Meine Ages Erfahrungen und Wunschliste - CRα
 
 
 

Re: Formel um Teil eines Strings (Zahl) zu extrahieren?

Beitrag23. Okt 2010, 16:59
Sollen mehrere Zeichen das Ende des zu extrahierenden Strings kennzeichnen, so könnten zunächst mehrere FIND Funktionen mit den zu suchenden Endbedingungen den kürzesten Teilstring ermitteln und daraus eine MID Funktion abgeleitet werden. Das könnte allerdings die maximal mögliche Länge der Abfrage wieder sprengen. Daher bleibt dann nur, das zu suchende Zeichen zunächst mit (mehreren) SUBSTITUTE Funktionen in ein eindeutiges Zeichen zu verwandeln und dann in einem weiteren Schritt die beschriebene Funktion einzusetzen. Enthält der zu bearbeitende Text mehrere der zu suchenden Zeichen, also z.B. das Komma und das Semikolon, so werden alle entsprechenden Zeichen durch die SUBSTITUTES ausgetauscht, der anschliessende FIND ermittelt dann den kürzesten Teilstring.
WARNUNG: Damit wird der Datenbestand geändert, eine Sicherung der Daten sollte also vorher erfolgen.
Grundsätzlich bin ich persönlich gegen die Nutzung von Feldern in einer GEDCOM-Datei zu Zwecken, die dazu nicht vorgesehen sind, da damit die Austauschbarkeit der Daten verlorengeht. Die ID-Nr. soll nach der Definition ja die Sozialversicherungs-Nummer enthalten. Einzige zulässige Möglichkeit ist daher das Notizfeld.

Ahnenforschung für die Familie und für das, was mich sonst noch interessiert
Ich suche Informationen über Angehörige des 3.Brandenburgischen Jägerbataillons in Lübben/Spreewald (zwischen 1860 und 1870)
 
 
 

Re: Formel um Teil eines Strings (Zahl) zu extrahieren?

Beitrag23. Okt 2010, 19:27
Danke für die neuen Hinweise! SUBSTITUTE habe ich bei anderen Feldern in Verwendung; eine Änderung der zugrundeliegenden GEDCOM-Felder gibt es m.W. aber nicht. Ich werde weiterprobieren.

Von der Einschränkung auf die Sozialversicherungs-Nummer wusste ich bis jetzt nichts; ich dachte immer sie könne dazu dienen eine eigene ID-Nr. zu vergeben.
Laut Definition in GEDCOM-Tags (GEnWiki)
IDNO IDENT_NUMBER Identitätsnummer Nummer zur Identifizierung einer Person in einem maßgeblichen externen System A number assigned to identify a person within some significant external system.

Laut dieser Interpretation wäre meine Anwendung noch zulässig. Ich denke dieses Feld ist der Soz.vers.nr. vorbehalten:
SSN SOC_SEC_NUMBER Sozialversicherungsnummer Nummer zur Identifizierung einer Person in der Sozialversicherung und/oder bei der Steuer A number assigned by the United States Social Security Administration. Used for tax identification purposes.


Ich verstehe zwar die Bedenken bei SSN, aber wieso sollte als Alternative nur das Notizfeld möglich sein? Wenn dann würde ich "anderes Ereignis" (in Ages, müsste GEDCOM EVEN sein?) nehmen. Notizen verwende ich sehr ungerne.

Ages! 2 - Gutes Forschen und viel Erfolg! Prioritäten: Standards (GEDCOM Export/Import), Datensicherheit, Quellen und Publizierbarkeit. Über 18.000 Personen. Win7x64 4 GB RAM. Meine Ages Erfahrungen und Wunschliste - CRα
 
 
 

Re: Formel um Teil eines Strings (Zahl) zu extrahieren?

Beitrag23. Okt 2010, 21:37
Nach meinem Kenntnisstand wird die IDNO üblicherweise zur Speicherung der schweizerischen SV-Nummer benutzt; ob das Standard ist, vermag ich nicht zu sagen. In der englischsprachigen Dokumentation der von ages bereitgestellten Dokumentation desGEDCOM-Standards steht allerdings die kanadische Gesundheits-Nummer, aber auch:
A number assigned to identify a person within some significant external system
.
Ein "anderes Ereignis" wäre natürlich eine Möglichkeit, um die ungeliebte Speicherung im Notizbereich zu vermeiden, aber wie unterscheide ich dann mehrere unterschiedliche andere Ereignisse? Da würde doch auch dem Individualismus das Tor weit geöffnet.

Ahnenforschung für die Familie und für das, was mich sonst noch interessiert
Ich suche Informationen über Angehörige des 3.Brandenburgischen Jägerbataillons in Lübben/Spreewald (zwischen 1860 und 1870)
 
 
 

Re: Formel um Teil eines Strings (Zahl) zu extrahieren?

Beitrag24. Okt 2010, 03:09
Wir schweifen zwar etwas vom Thread ab, aber ich glaube kaum, dass es Forscher gibt, welche von Personen in z.B. mehr als 10 Ländern die Sozialvers.nr. haben. Außerdem bezweifle ich, dass dieses Feld häufig genutzt wird. Wenn, dann müsste ich mir Sorgen machen, dass das Feld nicht richtig in zukünftige Software übernommen wird; aber da der Inhalt nicht standardisiert ist, dürfte das wohl hoffentlich kein Problem darstellen. Das von mir verwendete Ordnungskennzeichen wird in Zukunft äußerst bedeutend auch beim Austausch mit mitarbeitenden Forschern. Notizen halte ich wie gesagt nur für temporäre "Spickzettel", aber nicht für das Ablegen von dauerhaften Informationen geeignet. In meiner Datenbank (ca. 14.000 Personen) werde ich demnächst an die 3.000 Personen meiner Gesamtverwandtschaft eindeutig kennzeichnen. Mit dem ID-Feld und den Ages-Formeln funktioniert dies recht gut. Zur Methodik der Kennzeichnung bin ich noch am tüfteln, dazu vielleicht an anderer Stelle mehr.

Ages! 2 - Gutes Forschen und viel Erfolg! Prioritäten: Standards (GEDCOM Export/Import), Datensicherheit, Quellen und Publizierbarkeit. Über 18.000 Personen. Win7x64 4 GB RAM. Meine Ages Erfahrungen und Wunschliste - CRα
 
 
 

Re: Formel um Teil eines Strings (Zahl) zu extrahieren?

Beitrag25. Okt 2010, 08:08
Dank des außerordentlichen guten Supports in diesem Excel Forum Worksheet Functions ist nun eine sehr kompakte Formel als Lösung hervorgegangen, welche auch in anderen Fällen gut angewendet werden kann:
Code: Alles auswählen
=SUBSTITUTE(LEFT(SUBSTITUTE(SUBSTITUTE(MID(SUBSTITUTE(IDNO.TYPE,"CR ",REPT(" ",255)),250,255),",",REPT(" ",255)),";",REPT(" ",255)),255)," ","")

Der zu suchende String wurde mittlerweile auf "CR " + Kennzeichner abgewandelt. Will man eine Zahl als Output ist die Operation "*1" anzufügen. Als mögliche Feldinhalte kommen z.B. folgende in Betracht:
  1. "" -> "" (Nichts)
  2. "abcxyz" -> "" (Nichts)
  3. "CR 256"
  4. "CR 256, 278, 296"
  5. "CR 2,278,296"
  6. "CR 25; XYZ 412, 478"
  7. "CR 2566, 278, 296; XYZ 412, 478"
  8. "ABC 1232, 1468; CR 12345, 1278, 1296"
  9. "ABC 1232, 1468; CR 12345678, 1278, 1296; XYZ 412, 478"
  10. "ABC 1232, 1468; CR 12(a)b.56+II-VI; XYZ 412, 478"
  11. "ABC 1232, 1468; CR 123456789012; XYZ 412, 478"

Wenn Autor jcd mitliest, würde ich Ihn bitten folgendes für zukünftige Ages-Versionen einzuplanen:
  • Unterstützung der MIN und MAX Funktion
  • Unterstützung von Rechenfeldern mit mehr als 255 Zeichen Formelinhalt

Ages! 2 - Gutes Forschen und viel Erfolg! Prioritäten: Standards (GEDCOM Export/Import), Datensicherheit, Quellen und Publizierbarkeit. Über 18.000 Personen. Win7x64 4 GB RAM. Meine Ages Erfahrungen und Wunschliste - CRα
 
 
 

Re: Formel um Teil eines Strings (Zahl) zu extrahieren?

Beitrag25. Okt 2010, 15:03
Wow. Mit solch komplexen Formeln hatte ich bei der Programmierung der Rechenfelder nicht wirklich gerechnet.

Der Wunsch nach längeren Rechenformeln und den MIN/MAX-Funktionen liegt da auf der Hand. Zumindest letzteres sollte nicht besonders schwierig in der Umsetzung sein.
Site Admin
jcd
 
 
 

Re: Formel um Teil eines Strings (Zahl) zu extrahieren?

Beitrag25. Okt 2010, 18:48
jcd hat geschrieben:Wow. Mit solch komplexen Formeln hatte ich bei der Programmierung der Rechenfelder nicht wirklich gerechnet.

Der Wunsch nach längeren Rechenformeln und den MIN/MAX-Funktionen liegt da auf der Hand. Zumindest letzteres sollte nicht besonders schwierig in der Umsetzung sein.

Das ist das schöne an den Rechenfeldern: den fortgeschrittenen Nutzern wird damit ein Instrument mit (fast) unbegrenzten Möglichkeiten in die Hand gegeben. Danke für den Hinweis zu der möglichen Berücksichtigung in zukünftigen Versionen. Bei dieser Möglichkeit möchte ich auch noch auf die "lästigsten" Einschränkungen der Rechenfelder hinweisen:
Sorry, dies lag mir auf der Zunge... ;-) Die Formatierung (vor allem Font) über Rechenfelder wurde ja schon angekündigt.

Ages! 2 - Gutes Forschen und viel Erfolg! Prioritäten: Standards (GEDCOM Export/Import), Datensicherheit, Quellen und Publizierbarkeit. Über 18.000 Personen. Win7x64 4 GB RAM. Meine Ages Erfahrungen und Wunschliste - CRα
 
 
 
 
 
cron