Arrays CAPL-用逗号分隔字符串并在矩阵中设置

Arrays CAPL-用逗号分隔字符串并在矩阵中设置,arrays,string,capl,Arrays,String,Capl,我有一个从文本文件中获取的字符串,我想将其与逗号分开,并在数组中设置每个项。我对如何编写代码有一个大致的想法,但我想确保没有任何更简单的方法可以做到这一点。 是否有一个函数可以执行此操作?我需要类似于python中split()的东西,用于CAPL 以前 char dataString[200] = "MAX_VOLT, MAX_CURR, MAX_TIME, TEMP, A0_MAX"; 之后 这只是一个想法,我没有测试过。首先,我将获得数据字符串[200]中所有逗号的位置。使用函数

我有一个从文本文件中获取的字符串,我想将其与逗号分开,并在数组中设置每个项。我对如何编写代码有一个大致的想法,但我想确保没有任何更简单的方法可以做到这一点。 是否有一个函数可以执行此操作?我需要类似于python中split()的东西,用于CAPL

以前

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


这只是一个想法,我没有测试过。首先,我将获得
数据字符串[200]
中所有逗号的位置。使用函数
strstrstr(char s1[],char s2[])
获取数据字符串中第一个逗号的位置。使用第一个逗号位置作为输入参数
offset
,使用
strstr_off(char s1[],long offset,char s2[])获取以下逗号位置。其余逗号相同


然后我将使用for循环,使用逗号位置将字符从
dataString
复制到
dataArray
。如果在CAPL脚本中使用相同的
dataArray
,请确保在处理不同长度的字符串并用新字符串重新填充
dataArray
时清空
dataArray
中的字符串。希望这有帮助。

我实现了一个最小的CAPL脚本来测试我的想法:

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