Author Topic: Как убить массив токенов после вызова STRSEPARATE() ?  (Read 1898 times)

0 Members and 1 Guest are viewing this topic.

clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Имею файл с 15 строками, каждая строка содержит 7 значений, разделенных ";" (CSV-файл)
Пытаюсь загрузить этот файл в массив и разобрать каждую строку функцией STRSEPARATE() для дальнейшего распарсивания . Но столкнулся, что получаемый массив токенов с каждым вызовом STRSEPARATE() растет - то есть массив не убивается, новые токены добавляются в него
Code: (clickermann) [Select]
// загрузим файла в массив
TFREADARR("parameters.csv", $parameters_arr)
$line = STRCONCAT("TFREADARR(parameters.csv, $parameters_arr): ARRSIZE($parameters_arr)=", ARRSIZE($parameters_arr)) 
$params_count = ARRSIZE($parameters_arr)
FOR ($par_ind = 0, $par_ind < $params_count, 1)
  $curr_line = $parameters_arr[$par_ind]
  STRSEPARATE($curr_line, ";", $param_tokens)
  $line = STRCONCAT($par_ind, ": ARRSIZE($param_tokens)=", ARRSIZE($param_tokens)) 
  TFWRITE("log.txt", $line)
  // попытка зачистить массив $param_tokens не сработала
  $tokens = ARRSIZE($param_tokens)
  FOR($kount=0,$kount < $tokens, 1)
    ARRPOP($param_tokens)
  END_CYC
END_CYC
Результат:
Code: (clickermann) [Select]
TFREADARR(parameters.csv, $parameters_arr): ARRSIZE($parameters_arr)=15
0: ARRSIZE($param_tokens)=7
1: ARRSIZE($param_tokens)=14
2: ARRSIZE($param_tokens)=21
3: ARRSIZE($param_tokens)=28
4: ARRSIZE($param_tokens)=35
5: ARRSIZE($param_tokens)=42
6: ARRSIZE($param_tokens)=49
7: ARRSIZE($param_tokens)=56
8: ARRSIZE($param_tokens)=63
9: ARRSIZE($param_tokens)=70
10: ARRSIZE($param_tokens)=77
11: ARRSIZE($param_tokens)=84
12: ARRSIZE($param_tokens)=91
13: ARRSIZE($param_tokens)=98
14: ARRSIZE($param_tokens)=105

Что делать, как с этим бороться? Мне нужно чтобы перед следующим вызовом STRSEPARATE() массив $param_tokens был нулевого размера.

Буду благодарен объяснению моей ошибки или любому костылю, который решит мою проблему.

clicker_student

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Спасибо!!!! Скоро все тонкости узнаю.
Я уже пытался по топорномму рубить  :)  Не помогло
Code: (clickermann) [Select]
SETVAR($param_tokens, 0)  // вешает скрипт
$param_tokens  = 0  // не реагирует

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Code: (clickermann) [Select]
$param_tokens  = 0  // не реагирует

Если $param_tokens - массив, то такая команда эквивалентна присвоению значения первому элементу
Code: (clickermann) [Select]
$param_tokens[0] = 0Само собой массив так не очистить.