current() и next() по строке

bsv

Guest
current() и next() по строке

Есть весьма хитрая строка. Типа дампа БД, поля не фиксированной длины, имеется сепаратор. Дабы запихнуть ее в базу, пытаюсь ее "распарсить".
Вроде бы строка в пхп, по сути своей массив чарактер.
Или меня закоротило, и это не совсем так?
Потому что когда я пытаюсь пройтись по строке как по массиву:
PHP:
  $buffer = fgets($fp, 4096);
  do {
     if (current($buffer) == chr(19)){++$fieldcounter;}
     else {$fields[$fieldcounter] .=  current($buffer);}
     } while (next($buffer));
то получаю
PHP Warning: current(): Passed variable is not an array or object
 

tony2001

TeaM PHPClub
а так?
PHP:
$i = 0;
do { 
     if (isset($buffer{$i}) == chr(19)) {
      ++$fieldcounter;
     } 
     else {
      $fields[$fieldcounter] .=  $buffer{$i};
     } 
   $i++;
} while (isset($buffer{$i}));
 

bsv

Guest
Обе идеи работают, спасибо.
(для данной задачи explode таки точнее)

Для общего развития. А всетаки, можна функциям работы с массивами скормить строку как массив символов? У меня куча нетипичных для веб-программ работ со строками, хотелось бы знать.
 

tony2001

TeaM PHPClub
>можна функциям работы с массивами скормить строку как массив символов
в большинстве случаев нельзя, вероятно.
для PHP строка - это 1 zval.
а массив - zval, содержащий хэш zval'ов.
соотв-но, работа с ними достаточно отличается.
и вообще, "вы этого не должны хотеть" =)
 

гоша

Guest
bsv

хотелось бы (из чистого любопытства) узнать, для каких задач вам не хватает строковых функций и механизма регулярных выражений?
 

bsv

Guest
Это не аргумент, конечно, но покамест реги у меня вызывают полный ступор мозгов, если это чтото сложнее чем одно условие. Может и можно ...
Всетаки я "кодю" редко, возможно не хватает опыта. А по тематике моих прог, мне часто нужно эвристически распознавать положение поля в строке по контексту. Леплю кучу for etc
 

SiMM

Новичок
bsv, не можешь въехать в реги - пробуй стандартные строчные функции - положение поля в строке можно узнать хотя бы при помощи [m]strpos[/m]
 

bsv

Guest
SiMM
Я просто нарывался, что некоторые функции срезаются на небуквенном содержимом. Не уверен, насколько им можно "доверять". Но серьезно не тестировал, да и давно было. Не вспомню точно.
Как вернусь к этому проекту (опять пришлось забросить, диля ...), надо будет "набрать статистику".
 
Сверху