locked
String teilen RRS feed

  • Frage

  • Hallo,

    folgendes.

    Ich habe einen String, mit einem Text der sagen wir mal 167 Zeichen lang ist.

    Diesen Text möchte ich in Strings teilen, die alle nicht größer als 40 Zeichen sind und wo der Schluss immer mit

    einem ganzen Wort aufhört. Wie mache ich das in Foxpro am besten ?

    Montag, 30. September 2013 15:07

Alle Antworten

  • Hallo Eric,

    um in Strings herum zu pfutschen hat der Fuchs ne Menge Möglichkeiten auf Lager.
    Um Deinen Wunsch zu erfüllen schaust Du  Dir am besten die SUBSTR()-Funktion in der Hilfe an und dann beachte die 'see also' - Hinweise. Das ist alles recht einfach zu verstehen aber wirkungsvoll.

    hth

    Horst


    Dienstag, 1. Oktober 2013 06:16
  • Hi,

    ich würde Dir empfehlen, mal ein wenig die Funktionen rund um SET MEMOWITH zu durchstöbern.

    -> MEMLINES(), MLINES(), ALINES()

    kommen mir da so ad hoc in den Sinn. Mit SET MEMOWIDTH 40 definierst Du die zulässige Breite und musst anschliessend nur noch mit den drei Funktionen die einzelnen Zeilen verarbeiten. Die Formatierung übernimmt dann komplett der Fuchs für Dich.

    Bevor Du die Memobreite allerdings auf 40 setzt solltest Du die aktuelle Einstellung auf jeden Fall zwischenspeichern um sie anschiessend wird herstellen zu können... ;-)

    -> liCurrentMWidth = SET( [MEMOWIDTH] )

    <added>

    hier noch schnell etwas Mustercode ;-)

    c1=[das ist mein string und dieser String ist ziemlich lang. und warum ist er so land? ist doch klar! Ich muss testen wie die Formatierung unter MEMOWIDTH funktioniert!]
    ?c1
    SET MEMOWIDTH TO 40
    ?MEMLINES( c1 )
    ?MLINE( c1 , 1 )
    ?MLINE( c1 , 2 )
    ?MLINE( c1 , 3 )
    ?MLINE( c1 , 4 )
    ?MLINE( c1 , 5 )
    

    JM2C


    Gruss / Best regards
    -Tom
    Debugging is twice as hard as writing the code in the first place.
    Therefore, if you write the code as cleverly as possible,
    you are, by definition, not smart enough to debug it. 010101100100011001010000011110000101001001101111011000110110101101110011


    • Bearbeitet Tom Borgmann Dienstag, 1. Oktober 2013 08:30 Code hinzugefügt
    Dienstag, 1. Oktober 2013 08:16
  • Danke. Das probiere ich mal aus...

    Andere Frage..

    Ich habe 2-3 Tabellen mit den identischen Spalten.

    Ich möchte die 3 in einenm Cursor reinlegen.

    Jedoch ein select * from tabelle1 into cursor x1

    select * from tabelle2 into cursor x1

    select * from tabelle3 into cursor x1

    speichert nur die werte von tabelle3, 2 und 1 werden gelöscht.

    Kann man den Cursor nicht so einstellen das er die Werte behält ?

    Dienstag, 1. Oktober 2013 10:25
  • @Tom

    Super, hat geklappt. Danke schön

    Dienstag, 1. Oktober 2013 11:09
  • Hm, das wäre eigentlich ein neuer Thread ;-)

    aber probier mal die UNION Klausel aus. Wenn alle drei Tabellen identische Strukturen aufweisen und die Felder gleich benamt sind, dann sähe das in etwa wie folgt aus:

    SELECT * FROM crs1 ;
    UNION ;
    select * FROM crs2 ;
    UNION ;
    select * FROM crs3 ;
    INTO CURSOR crsunion


    Gruss / Best regards
    -Tom
    Debugging is twice as hard as writing the code in the first place.
    Therefore, if you write the code as cleverly as possible,
    you are, by definition, not smart enough to debug it. 010101100100011001010000011110000101001001101111011000110110101101110011


    Dienstag, 1. Oktober 2013 12:04
  • noch einige Bemerungen dazu:

    SELECT addiert nicht Sätze zu den schon gewählten hinzu. Du erzeugst also den Cursor x1 jedesmal neu und hast deswegen auch nur das letzte Ergebnis.
    Deine Frage ist keine spezielle Foxpro-Frage sondern eine SQL-Frage. Der Fuchs versteht diese Sprache auch und Du kannst sie im Foxcode verwenden. Soweit zum Verständnis. Will heissen Du kannst solche Fragen auch in speziellen Foren stellen.
    Wenn die Bedingungen die Tom genannt hat nicht exakt zutreffen wirst Du mit UNION nicht weit kommen. d.h. Du brauchst bei diesem Beispiel die gleichen Dateistrukturen , nicht  nur gleiche Felder. Wenn Du bessere Möglichkeiten suchst Daten zusammen zu fügen oder auszuwählen schau Dir auch die JOIN-Befehle an. Du findest im Internet einige Lehrbücher dazu.

    hth
    Horst

    Dienstag, 1. Oktober 2013 12:41