2017-10-11 6 views
0

Ich habe eine Zeichenfolge, die ich aus einer Textdatei und ich möchte es von Kommas trennen, und legen Sie jedes Element in einem Array. Ich habe eine allgemeine Vorstellung davon, wie ich das programmieren soll, aber ich möchte sicherstellen, dass es keinen einfacheren Weg gibt, dies zu tun. Gibt es eine Funktion, dies zu tun? Ich möchte etwas ähnlich zu split() in Python, um in einer CAPL zu verwenden.CAPL - Trennen Sie eine Zeichenfolge durch Kommas und setzen Sie in einer Matrix

Vor

char dataString[200] = "MAX_VOLT, MAX_CURR, MAX_TIME, TEMP, A0_MAX"; 

Nach

char dataArray[5][50] = {"MAX_VOLT","MAX_CURR","MAX_TIME","TEMP","A0_MAX"}; 

Antwort

0

Dies ist nur eine Idee, die ich testen did'nt. Zuerst würde ich die Positionen aller Kommas in Ihrem bekommen. Verwenden Sie die Funktion strstr(char s1[], char s2[]);, um die Position Ihres ersten Kommas in dataString zu erhalten. Verwenden Sie die erste Kommaposition als Eingabeparameter offset, um die folgenden Kommapositionen mit der strstr_off(char s1[], long offset, char s2[]); zu erhalten. Gleiches für verbleibende Kommas.

Dann würde ich for-Schleifen verwenden, die die Kommapositionen verwenden, um die Zeichen von dataString zu dataArray zu kopieren. Wenn Sie dasselbe dataArray in Ihrem CAPL-Skript verwenden, müssen Sie die Zeichenfolgen in dataArray löschen, wenn Sie mit Zeichenfolgen unterschiedlicher Länge arbeiten, und dataArray mit neuen Zeichenfolgen füllen. Hoffe das hilft.

0

implementiert ich eine minimale CAPL Skript meine Idee zu testen:

variables { 
    char dataString[200] = "MAX_VOLT, MAX_CURR, MAX_TIME, TEMP, A0_MAX"; 
    long pos1, pos2, pos3, pos4, pos5; 
    char dataArray[5][50]; 
} 

on start { 
    int i; 

    pos1 = strstr(dataString, ","); 
    pos2 = strstr_off(dataString, pos1+1, ","); 
    pos3 = strstr_off(dataString, pos2+1, ","); 
    pos4 = strstr_off(dataString, pos3+1, ","); 
    pos5 = strlen(dataString); 
    write("pos1 = %d, pos2 = %d, pos3 = %d, pos4 = %d, pos5 = %d", pos1, pos2, pos3, pos4, strlen(dataString)); 

    // get first string 
    for (i = 0; i < pos1; i++) { 
    dataArray[0][i] = dataString[i]; 
    } 
    // get second string 
    for (i = 0 ; i < pos2 - pos1 - 3; i++) { 
    dataArray[1][i] = dataString[i + pos1 + 3]; 
    } 
    // get third string 
    for (i = 0 ; i < pos3 - pos2 - 3; i++) { 
    dataArray[2][i] = dataString[i + pos2 + 3]; 
    } 
    // get fourth string 
    for (i = 0 ; i < pos4 - pos3 - 3; i++) { 
    dataArray[3][i] = dataString[i + pos3 + 3]; 
    } 
    // get fifth string 
    for (i = 0 ; i < pos5 - pos4 - 3; i++) { 
    dataArray[4][i] = dataString[i + pos4 + 3]; 
    } 

    write("%s", dataArray[0]); 
    write("%s", dataArray[1]); 
    write("%s", dataArray[2]); 
    write("%s", dataArray[3]); 
    write("%s", dataArray[4]); 
} 

Ausgang:

CAPL pos1 = 8, pos2 = 19, pos3 = 30, pos4 = 37, pos5 = 46 
CAPL MAX_VOLT 
CAPL MAX_CURR 
CAPL MAX_TIME 
CAPL TEMP 
CAPL A0_MAX 
Verwandte Themen