Bestimmte Werte aus einer Zeichenkette rausfiltern und die Zeichenkette trennen

marian

Mitglied
Thread Starter
Dabei seit
04.11.2002
Beiträge
57
Reaktionspunkte
0
Hallo,
ein Feld einer FileMaker Tabelle beinhaltet eine lange Reihe von Zeichen. In etwa so:
Code:
[TAB:Specifications] <table width='95%' summary='Adam bottle 100 ml'>   <tbody>   <tr>     <td colspan='2'>      <table width='100%'>       <tr>        <td class='name' width='65%'>Adam bottle 100 ml</td>        <td class='preis' width='35%'>93,41 EUR<br />        <span style='font-weight: normal; font-style: normal; font-size: 10px; line-height: 12px; color: #000000;'>(incl. 19% Tax excl. Shipping costs)</span></td>       </tr>      </table>     </td>    </tr>    <tr>     <th width='25%'>volume:</th>     <td width='75%'>100 ml</td>    </tr>    <tr class='odd'>     <th width='25%'>height:</th>     <td width='75%'>157 mm</td>    </tr>    <tr>     <th width='25%'>&Oslash;:</th>     <td width='75%'>67,7 mm</td>    </tr>    <tr class='odd'>     <th width='25%'>weight:</th>     <td width='75%'>170 g</td>    </tr>    <tr>     <th width='25%'>color:</th>     <td width='75%'>white flint (clear glass)</td>    </tr>    <tr class='odd'>     <th width='25%'>mouth:</th>     <td width='75%'>10,5 mm cork mouth</td>    </tr>   <tr>     <th width='25%'>box:</th>     <td class=’EN’ width='75%'>50 pcs. 1,57 &euro; each (excl. 19% Tax excl. <a href='http://xxxx.php?coID=1' target='_blank'>Shipping costs</a>)</td>    </tr>   </tbody> </table>
oder so:
Code:
[TAB:Spezifikationen] <table width='95%' summary='Amphora Romana Flasche 1500 ml'>   <tbody>   <tr>     <td colspan='2'>      <table width='100%'>       <tr>        <td class='name' width='65%'>Amphora Romana Flasche 1500 ml</td>        <td class='preis' width='35%'>72,64 EUR<br />        <span style='font-weight: normal; font-style: normal; font-size: 10px; line-height: 12px; color: #000000;'>(inkl. 19% MwSt. zzgl. Versand)</span></td>       </tr>      </table>     </td>    </tr>    <tr>     <th width='25%'>Volumen:</th>     <td width='75%'>1500 ml</td>    </tr>    <tr class='odd'>     <th width='25%'>H&ouml;he:</th>     <td width='75%'>480 mm</td>    </tr>    <tr>     <th width='25%'>&Oslash;:</th>     <td width='75%'>101,3 mm</td>    </tr>    <tr class='odd'>     <th width='25%'>Gewicht:</th>     <td width='75%'>1400 g</td>    </tr>    <tr>     <th width='25%'>Farbe:</th>     <td width='75%'>wei&szlig; (Klarglas)</td>    </tr>    <tr class='odd'>     <th width='25%'>Verschluss:</th>     <td width='75%'>18,3 mm Korkm&uuml;ndung</td>    </tr>    <tr>     <th width='25%'>Karton:</th>     <td class=’DE’ width='75%'>15 Stk. a 4,07 &euro; (zzgl. 19% MwSt. zzgl. <a href='xxxx.php?coID=1' target='_blank'><span style='text-decoration:underline'>Versand</span></a>)</td>    </tr>   </tbody> </table>

Ich würde gerne die zwei Zahlen hinter <td class=’EN’ width='75%'> (also 50 und 1,57) in dem ersten Beispiel oder die zwei Zahlen hinter <td class=’DE’ width='75%'> (also 15 und 4,07) in dem zweiten Beispiel rausfiltern und in zwei neuen Felder "schreiben" lassen.
Es wäre sicherlich einfach wenn dieser Text in drei Feldern aufgeteilt wäre. Bis zu den "Schlüsseltags" (<td class=’EN’ width='75%'> oder <td class=’DE’ width='75%'>) dann die "Schlüsseltags" in einem Feld der Sprache hiesse und dann der Rest. Dann könnte man sicherlich mit einem Formel für ein Feld Ausschnitt
Code:
Falls ( Sprache = "<td class=’EN’ width='75%'>" ; WörterLinks ( Rest ; 3 ) ; Sprache = "<td class=’DE’ width='75%'>" ; WörterLinks ( Rest ; 4 ) )
erstmal trennen und dann mit
Code:
WörterLinks ( Ausschnitt ; 1 )
und
Code:
WörterRechts ( Ausschnitt ; 1 )

Bekommt man so etwas auch ohne trennen der Zeichenkette?

Das wäre die erste Frage.

Die zweite Frage ist aber dass ich das Feld doch trennen muss um später den ganzen Code wieder zusammenzusetzen aber mit neuen Zahlen.
So dass ich nach einer Möglichkeit suche einmal bis zu <td class=’DE’ width='75%'> resp. <td class=’EN’ width='75%'> in einem Feld zu haben dann diese zwei Schlüsselstellen dann zusammengesetztes Feld mit den neuen Zahlen und am Ende der Rest des Codes.

Hat jemand vielleicht eine Lösung dafür?

Danke schön.
 
Schau Dir mal die Funktion "ZeichenMitte ()" an, die macht das Gewünschte: "Extrahiert die AnzahlZeichen aus Text, beginnend bei der Zeichenposition, die von Beginn angegeben wird."

Die Kunst ist es, den Beginn und die Anzahl der zu extrahierenden Zeichen in der gleichen Formel zu definieren.....
 
Schau Dir mal die Funktion "ZeichenMitte ()" an, die macht das Gewünschte: "Extrahiert die AnzahlZeichen aus Text, beginnend bei der Zeichenposition, die von Beginn angegeben wird."

Die Kunst ist es, den Beginn und die Anzahl der zu extrahierenden Zeichen in der gleichen Formel zu definieren.....
Danke ThoRo.
Ich kam mit der "ZeichenMitte ()" nicht gut an.

Am Ende habe ich die Sache doch gelöst.
Ich schreibe hier wie, vielleicht bräuchte jemand das auch oder vielleicht bekomme ich von jemand ein besseren Tipp.

Zwar, wie man sieht, gibt es in dem Feld unterschiedliche Sprachen, aber die Texte kommen auch in zwei unterschiedlichen Feldern.

Ich nehme jetzt als Beispiel nur die duetsche Version.

Ich habe also ein Feld "Artikelbeschreibung DE" wo der Text vorkommt:
Code:
[TAB:Spezifikationen] <table width='95%' summary='Amphora Romana Flasche 1500 ml'>   <tbody>   <tr>     <td colspan='2'>      <table width='100%'>       <tr>        <td class='name' width='65%'>Amphora Romana Flasche 1500 ml</td>        <td class='preis' width='35%'>72,64 EUR<br />        <span style='font-weight: normal; font-style: normal; font-size: 10px; line-height: 12px; color: #000000;'>(inkl. 19% MwSt. zzgl. Versand)</span></td>       </tr>      </table>     </td>    </tr>    <tr>     <th width='25%'>Volumen:</th>     <td width='75%'>1500 ml</td>    </tr>    <tr class='odd'>     <th width='25%'>H&ouml;he:</th>     <td width='75%'>480 mm</td>    </tr>    <tr>     <th width='25%'>&Oslash;:</th>     <td width='75%'>101,3 mm</td>    </tr>    <tr class='odd'>     <th width='25%'>Gewicht:</th>     <td width='75%'>1400 g</td>    </tr>    <tr>     <th width='25%'>Farbe:</th>     <td width='75%'>wei&szlig; (Klarglas)</td>    </tr>    <tr class='odd'>     <th width='25%'>Verschluss:</th>     <td width='75%'>18,3 mm Korkm&uuml;ndung</td>    </tr>    <tr>     <th width='25%'>Karton:</th>     <td class=’DE’ width='75%'>15 Stk. a 4,07 &euro; (zzgl. 19% MwSt. zzgl. <a href='xxxx.php?coID=1' target='_blank'><span style='text-decoration:underline'>Versand</span></a>)</td>    </tr>   </tbody> </table>

1. Zuerst habe ich ein Feld "Schlüssel Artikelbeschreibung DE" erstellt wo der Text sich befindet der die Teile begrenzt:
Code:
<td class=’DE’ width='75%'>

2. Dann habe ich eine Feld "Vorkommen in Artikelbeschreibung DE" erstellt. Der soll überprüfen ob in dem Text der Schlüssel sich befindet:
Code:
MusterAnzahl ( Artikelbeschreibung DE ; Schlüssel Artikelbeschreibung DE )

3. In dem Feld "Artikelbeschreibung DE 1.Teil" kommt mit der Formel:
Code:
ZeichenLinks ( Artikelbeschreibung DE; Position ( Artikelbeschreibung DE; Schlüssel Artikelbeschreibung DE; 1; 1 ) -1 )
der erster Teil des Textes (bis zum Schlüssel)

4. Da der Text in drei Teilen gesplittet werden soll und aus dem mittleren Teil zwei Zahlen herausgenommen werden müssen aber nur eine fixe Schnittstelle es gibt, habe ich eine "Vorstufe" eingebaut. Dadrin soll der Text hinter dem Schlüssel erscheinen. Also Feld "Artikelbeschreibung DE 2.Teil Vorstufe" erstellt mit der Formel:
Code:
ZeichenRechts ( Artikelbeschreibung DE; Länge ( Artikelbeschreibung DE ) - Position ( Artikelbeschreibung DE; Schlüssel Artikelbeschreibung DE; 1; 1 ) - 26 )
(-26 ist die Länge der Schlüssel und nach dem Schlüssel soll gezeigt werden.

5. Die deutsche Version des Textes beinhaltet 4 Wörter hinter dem Schlüsseltext wo die zwei Zahlen sich befinden die extrahiert werden müssen. Also ein Feld "Artikelbeschreibung DE 2.Teil" erstellt mit der Formel
Code:
WörterLinks ( Artikelbeschreibung DE 2.Teil Vorstufe ; 4 )

6. Ich musste die eine Formel haben wo sowohl für die deutsche Version als auch für die englische Version des Textes haben wo die Zahlen sowohl in einer vierer Wörter-Pack als auch in einer dreier Wörter-Pack erscheinen. Und wohl auch dass diese Zahlen unterschiedliche Zeichen haben.
Ich habe unter http://www.filemaker-magazin.de/abcms/fc0002804.html eine Eigene Funktion gefunden womit ich das dritte Teil des Textes "erzeugen" konnte.
In dem Feld "Artikelbeschreibung DE 3.Teil" habe ich also die Formel:
Code:
Trimme ( cfTextAfterSeparator ( Artikelbeschreibung DE 2.Teil Vorstufe ; Artikelbeschreibung DE 2.Teil ))

7. Und am Ende die Zahlen "ausseinander" halten mit
Code:
WörterLinks ( Artikelbeschreibung DE 2.Teil ; 1 )
und
Code:
WörterRechts ( Artikelbeschreibung DE 2.Teil ; 1 )
für zwei verschiedene Felder.


P.S. Bei der Recherche nach einer Eigener Funktion kam ich auf http://www.briandunning.com/cf/639
Auch interessant wenn man Inhalten aus bestimmten Zellen aus HTML Tabellen extrahieren möchte.
 
hallo marian,
für die Englischen "EN" Daten müsste dies hier dir den preis filtern.

ZeichenMitte ( ArtBezeichnung ; Position (ArtBezeichnung ; "pcs.";1;1 )+4;Position( ArtBezeichnung ;"&euro";1;1)-Position(ArtBezeichnung;"pcs.";1;1)-4)

Aus den zwei Datensätzen aus deinem anfangs Post ist zu Erkennen das das"&euro" in beiden vorhanden ist und immer nach dem Preis in der "EN" version wird "pcs." vor dem preis kommen.

Für die Deutsche 'Version "DN" kommt auch "&euro" nach dem Preis und "Stk. a" vor dem Preis.

+4 und -4 sind Notwendig um die Leseposition nach dem "pcs." zu starten und bis vor dem "&euro" zu auszzulesen.

du musst nur sicherstellen das in jedem Datensatz das das "&euro" auch hinterm Preis kommt und das das "pcs." vor dem Preis kommt dann kannst du mit einer Formel dir den Preis rausholen.
Für die Stückzahl, deinen zweiten Wert, würde ich genauso vorgehen.

Mfg
Norbert
 
Norbert, ich danke dir!
Es klappt einwandfrei. Sehr, sehr schön!
 
Zurück
Oben Unten