String manipulation < Mathematica < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 15:26 So 23.12.2012 | Autor: | belle |
Aufgabe | Generiere eine Liste mit den Worten m bis
einschließlich n aus der vorgegebenen Liste. |
Hier ist eine 1-level list of strings mit 3 Elementen.
2894;Hot Pink;53:09:44;14497,14
17456;Dark Cyan;19:06:42;69292,27
5147;Lime;54:11:55;52476,32
Alle Elemente sind chars, keine Zahlen oder anderes.
Der "WordSeparator" in den Elementen ist ";"
Die Anzahl der "Words" in den strings ist gleich. (Im Beispiel 4)
Die Anzahl der chars in den strings ist ungleich.
Die Anzahl der chars in den "Words" ist ebenfalls ungleich.
Generiere eine Liste mit den Worten m bis
einschließlich n aus der vorgegebenen Liste.
z.B.: vom 2.Wort bis einschließlich 3.Word. (m=2, m=3)
Hot Pink;53:09:44
Dark Cyan;19:06:42
Lime;54:11:55
Es ergibt sich wieder eine 1-level Liste, wieder wie
zuvor mit 3 Elementen. Jedes der Elemente ist
nach wie vor ein string. Die strings sind aber vorne und
hinten jeweils um die definierte Gruppe von chars verkürzt.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 12:41 Di 25.12.2012 | Autor: | hieron |
myInput = "2894;Hot Pink;53:09:44;14497,14; 17456;Dark Cyan;19:06:42;69292,27; 5147;Lime;54:11:55;52476,32";
myOutput = myInput // StringSplit[#, mySeperator = ";"] & //Partition[#, myRecordLength = 4] & // Map[#[(*loeschen*)[m = myRecordElements = {2, 3}]] &, #] &;
myInput // Definition
myOutput // Definition
(* fuer Erklaerungen Anfragen direkt an hieron@phimath.net *)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:55 Do 27.12.2012 | Autor: | belle |
Ich denke nicht, das es StringSplit zu machen ist.
Es wird als Ergebnis eine list mit 3 Elementen erwartet.
Ist es hier nicht.
Es muß so aussehen:
{"Hot Pink;53:09:44",
"Dark Cyan;19:06:42",
"Lime;54:11:55"}
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:58 Di 25.12.2012 | Autor: | hieron |
Wie kann ich nachträglich ">" entfernen, und dieses "(*loeschen*)", ein workaround wegen des formus, muß der user entfernen nachdem er es in mathematica kopiert hat, sollte aber auch so funktionieren.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:07 Di 25.12.2012 | Autor: | belle |
Ja, kannst du mit StringTrim machen.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:22 Di 25.12.2012 | Autor: | belle |
Eine Lösung wurde gefunden.
Diese ist aber recht umständlich.
Die Liste ist die in der Aufgabe gezeigte.
azr=3;
delim=";";
segmentlist[list_, von_, bis_] := (Do[ rean = inlisti;
arean = rean <> delim; pos = Flatten[StringPosition[arean, delim]];
len = Length[pos];
dro = Drop[pos, {1, len, 2}];
fla = Flatten[{0, dro}];
grenz = {flavon + 1, flavon + bis - 1};
extract = StringTake[arean, grenz];
inlisti = extract,
{i, azr}]; inlist)
m=2;n=2;
newlist = segmentlist[inlist, m, n]
{"Hot Pink;53:09:44",
"Dark Cyan;19:06:42",
"Lime;54:11:55"}
|
|
|
|