2017-10-11 3 views
0

J'ai une chaîne obtenue à partir d'un fichier texte et je veux la séparer des virgules, et définir chaque élément dans un tableau. J'ai une idée générale sur la façon de coder cela, mais je veux m'assurer qu'il n'y a pas de moyen plus simple de le faire. Y a-t-il une fonction pour cela? Je veux quelque chose de similaire à split() en python, à utiliser dans un CAPL.CAPL - Séparer une chaîne par des virgules et la mettre dans une matrice

Avant

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

Après

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

Répondre

0

Ceci est juste une idée, que je did'nt test. D'abord je voudrais obtenir les positions de toutes les virgules dans votre dataString[200]. Utilisez la fonction strstr(char s1[], char s2[]); pour obtenir la position de votre première virgule dans dataString. Utilisez la première position de virgule comme paramètre d'entrée offset pour obtenir les positions de virgules suivantes en utilisant le strstr_off(char s1[], long offset, char s2[]);. Pareil pour les virgules restantes.

Ensuite, je voudrais utiliser pour les boucles en utilisant les positions de la virgule pour copier les caractères de dataString à dataArray. Si vous utilisez le même dataArray dans votre script CAPL, assurez-vous de vider les chaînes dans dataArray lorsque vous traitez des chaînes de différentes longueurs et de remplir dataArray avec de nouvelles chaînes. J'espère que cela t'aides.

0

I mis en œuvre un script CAPL minimal pour tester mon idée:

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]); 
} 

sortie:

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