Durchsuchen einer Liste nach einem WertHallo,
Ich habe eine Liste, die ich aus einer durch Trennzeichen getrennten Zeichenfolge erstellt habe. Diese Zeichenfolge sieht folgendermaßen aus: (Nummer)|(Name)|(Nummer)|(Name)|(Nummer).... usw. Ich habe diese Zeichenfolge genommen und sie anhand des Trennzeichens ('|') analysiert. Ich habe dann diese Liste aller Werte genommen, eine neue Liste nur mit den „Namen“ erstellt und damit neue Spalten erstellt. Das Problem, auf das ich gestoßen bin, ist, wenn ich die Zeichenfolge analysiere und in jede Spalte platziere. Denn nicht jede Zeichenfolge in jeder Zeile beginnt mit demselben Wert. Ich musste alle „Namen“ aus zwei Datenzeilen abrufen. Die erste Reihe, die dritte Reihe, die fünfte Reihe usw. sollten also gleich sein, aber der „Name“, auf dem ihre Zeichenfolgen enden, ist unterschiedlich. Anschließend beginnt jede zweite, vierte, sechste usw. Zeile mit einem anderen „Namen“ (wo die ungeraden Zeilen aufgehört haben). Die Liste der Namen, die ich zum Erstellen der Spalten erhalte, enthält alle vorhandenen Namen, aber ich möchte in der Lage sein, alle Zahlen in den richtigen Spalten zu platzieren.
Ein Teil des Skripts, das ich zum Parsen aller Daten verwendet habe, ist:
// Alle Pin-Namen abrufen
Liste = {};
Liste = {};
list2 = {};
// Durchlaufen Sie die ersten Zeilen von :Test_Result, um die Pin-Namen zu erhalten
list = Wörter(Spalte(dt4,"Test_Result")[1], "|");
list2 = Wörter(Spalte(dt4,"Test_Result")[2], "|");
// Der erste Wert im String ist eine nutzlose Information, also entferne ihn
list2 = Remove(list2,1);
one_test_result_list = concat(list,list2);
// Alle Pin-Namen ab dem zweiten Wert abrufen
For(i = 1, i <= nitems(one_test_result_list)/2, i++,
Zuweisen(Liste , one_test_result_list[i*2]);
);
Ich habe keine Ahnung, wie das geht. Denn die „Zahl“, die jedem „Namen“ in der Zeichenfolge folgt, ist der Wert, der diesem Namen entspricht. Wenn ich also diesen Namen sehe, muss ich den nächsten Wert in die Spalte dieses Namens einfügen.
Vielen Dank für jede Hilfe!
Betreff: Eine Liste nach einem Wert durchsuchen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Guter Umgang mit Spaltennamen, die nicht im Voraus bekannt sind.
Betreff: Eine Liste nach einem Wert durchsuchendt = Neuer Tisch ( "Beispiel" , Zeilen hinzufügen ( 4 ) ,
Neue Spalte ( "Rohdaten" , Charakter , Nominell ,
Werte festlegen (
{ „1|Gesicht|3|Spock|4|Seepferdchen|5“ , „1|Gesicht|2|Shatner|3|Spock|5“ ,
„1|Gesicht|2|Shatner|3|Spock|4|Seepferdchen|5“ ,
„1|Shatner|3|Spock|4|Seepferdchen|5“ }
)
)
) ;
col_names = dt << Spaltennamen abrufen ( Zeichenfolge ) ;
für ( ich = 1 , ich <= nrows ( dt ) , ich ++,
Wortliste = Wörter ( dt : Rohdaten [ ich ] , „|“ ) ;
für ( k = 2 , k <= nitems ( Wortliste ) , k = k + 2 ,
one_col = Wortliste [ k ] ;
one_num = Wortliste [ k + 1 ] ;
Wenn ( ! enthält ( col_names , one_col ) ,
dt << neue Kolumne ( one_col , Charakter , nominal ) ;
einfügen in ( col_names , one_col ) ;
) ;
Spalte ( dt , one_col )[ ich ] = one_num ;
) ;
) ;
Betreff: Eine Liste nach einem Wert durchsuchenDanke, Craige! Genau das suche ich! Es funktioniert perfekt!
Betreff: Eine Liste nach einem Wert durchsuchenIch bin mir auch nicht sicher, ob ich die richtige Frage beantworte.Vielleicht hilft das:
dt = New Table( "Untitled",New Column( "dogs"),New Column( "cats"),New Column( "mice"),New Column( "horses"));
load = function({txt},
dt << addrow(1);
list=words(txt,"|");
for(i=1,i
columnName = list; i=i+1;
columnValue = list; i=i+1;
column(dt,columnName)[] = num(columnValue);
)
);
load("mice|3|horses|7");
load("cats|3|mice|9");

Zeile 1 erstellt eine Vorlagendatentabelle und geht davon aus, dass Sie alle möglichen Spaltennamen kennen.Zeile 2 beginnt eine Benutzerfunktion, die ein einzelnes Argument, txt, akzeptiert.Die Zeilen 3 bis 10 sind die Funktion: Füge eine Zeile zur Tabelle hinzu, erstelle eine Liste aus dem Text, gehe die Liste jeweils zwei Elemente durch, erhalte einen Namen, erhalte einen Wert.Zeile 8 erstellt eine Spalte aus einem Zeichennamen und verwendet das leere [ ], um einen Wert in die aktuelle Zeile einzufügen.Die Zeilen 11 und 12 sind Beispielaufrufe der Funktion.
Betreff: Eine Liste nach einem Wert durchsuchenDas ist knapp! Ich habe bereits den Code, der die Daten analysiert, und erstelle eine neue Liste nur mit den Namen. Was mir wirklich am Herzen liegt, ist, dass ich diese neuen Spalten, nachdem ich sie erstellt habe, mit allen Zahlen füllen muss. Da die Zahl hinter jedem Namen der Wert für diesen Namen ist, möchte ich einfach die Liste nach dem Namen durchsuchen und den nächsten Wert in diese Spalte einfügen. Etwa so:
(Angenommen, es handelt sich um Spalten): face | Shatner | Spock | Seepferdchen
2 | 3 | 4 | 5
Da die erste Zahl für mich nutzlos ist, ignoriere ich sie einfach, aber die Zahlen nach dem Namen sind die Werte, die mir wichtig sind. Angenommen, einer dieser Werte fehlt:
str = „1|Shatner|3|Spock|4|Seepferdchen|5“ ;
Ich habe immer noch alle ursprünglichen Spalten, aber in einer Zeile meiner Datentabelle könnte in der Mitte oder am Anfang ein Wert fehlen. Ich möchte, dass die Liste durchsucht wird und fehlende Werte übersprungen werden:
(Angenommen, es handelt sich um Spalten): face | Shatner | Spock | Seepferdchen
| 3 | 4 | 5
Ich bin mir nicht sicher, wie das möglich ist, aber nicht jede Zeile beginnt mit demselben Wert. Aber es sollte jeden Wert haben, nachdem es den ersten gefunden hat. Alles, was ich wirklich brauche, ist herauszufinden, in welche Spalte der erste Wert gehört, und dann einfach alle Spalten danach auszufüllen.
Danke schön!
Betreff: Eine Liste nach einem Wert durchsuchenIch bin mir nicht sicher, ob ich dich verstehe, aber es hört sich so an, als ob du das einfach tun willst?
str = „1|'Gesicht'|2|Shatner|3|Spock|4|Seepferdchen“ ;
Liste = Wörter ( str , „|“ ) ;
N = nitems ( Liste ) / 2 ;
Index = 1 :: N ;
Abende = Index * 2 ;
Namen = Liste [ Abende ] ;
Oder möglicherweise assoziative Arrays?