Fragensteller
String teilen

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 -
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- Bearbeitet Tom Borgmann Dienstag, 1. Oktober 2013 12:04
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
HorstDienstag, 1. Oktober 2013 12:41