PHP выбрать конкретный контент из входного файла, чтобы поместить в элементы массива - PullRequest
0 голосов
/ 04 марта 2011

У меня есть входной файл (взятый из файла, показанного ниже) с несколькими строками, из которого мне нужно выделить конкретный текст и поместить каждое выделение в элемент массива:

извлечь из входного файла:

"BLOCK","PARTNO"

"ELEMENT","HEADER-"

"NAME","1AB000072186"

"REVISION","0000"

"PARTSHAPE","RECT_074_044_030"

"PACKAGE","120830E"

"PMABAR",""

"PARTCOMMENT","CAP-TANT*150uF*20%*10V7343*4.3mm"

"ELEMENT","PRTIDDT-"

"PMAPP",1

"PMADC",2

"ComponentQty",2

"BLOCK","PARTNO"

"ELEMENT","HEADER-"

"NAME","1AB030430005"

"REVISION","0000"

"PARTSHAPE","RECT_072_042_030"

"PACKAGE","120830E"

"PMABAR",""

"PARTCOMMENT","1.0000 Amp SUBMINIATURE FUSE"

"ELEMENT","PRTIDDT-"

"PMAPP",2

"PMADC",0

"ComponentQty",1

"BLOCK","PARTNO"

"ELEMENT","HEADER-"

"NAME","1AB030430001"

"REVISION","0000"

"PARTSHAPE","RECT_072_042_030"

"PACKAGE","120830E"

"PMABAR",""

"PARTCOMMENT","2.0000 Amp SUBMINIATURE FUSE"

"ELEMENT","PRTIDDT-"

"PMAPP",2

"PMADC",0

"ComponentQty",1

Обратите внимание, что после каждого вхождения строки с фразой «ComponentQty» содержимое начинает повторяться ...

Где мне нужен PartNumber, следующий за вхождением «NAME» в одном измеренииэлемента массива и содержимого рядом с появлением «PARTSHAPE» во втором измерении для каждого элемента.Я очень смущен тем, как это сделать, хотя ... пожалуйста, помогите !!!

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

У меня сработали следующие шаги:

Раздел, вставленный в мой OP (повторяется много раз), определяется как $PartNoContents $BlockData[] - массив, в который мне нужно вставить выборки из $ PartNoContents.

$PartNoContents = str_replace('"', '', $PartNoContents);
$PartLines = explode("\n", $PartNoContents);
$PartData = array();
foreach ($PartLines as $PartLine){
    $PartData[] = explode(',', $PartLine);
}

for($p=0;$p<count($PartLines);$p++){
   if ( isset( $PartData[$p][1] ) && !empty( $PartData[$p][1] ) ){
       $p1 = str_replace(chr(13), '', $PartData[$p][1]);
       if ( isset($BlockData[$b][0]) && !empty($BlockData[$b][0]) && $BlockData[$b][7]==$p1 ){
           $BlockData[$b][13] = str_replace(chr(13), '', $PartData[$p+$PartDataIncNum][1]);
           $p = count($PartLines) ;
       }
   }
}
0 голосов
/ 04 марта 2011
$fh = fopen('yourfile.txt', 'rb');

$found_stuff = array();
$last_component = null;

while($line = fgets($fh)) { // read a line
   $parts = explode(',', $line);  // split into components
   switch($parts[0]) {  // based on which key we're on
       case '"NAME"':
            $last_component = $parts[1];   // save the key's value
            break;
       case '"PARTSHAPE"':
            $found_stuff[$last_component] = $parts[1];  // store the partshape name
            break;
   }
}
fclose($fh);

Это должно сделать основную работу. Прочитайте строку, разбейте ее на части, где встречаются запятые. Первая часть будет «ключом», вторая часть будет значением. Затем просто продолжайте чтение, пока мы не нажмем клавишу NAME или PARTSHAPE, а затем сохраните значения соответствующим образом.

Обратите внимание, что я не убрал двойные кавычки из значений. Это оставлено в качестве упражнения для читателя. Этот код также предполагает, что формат файла является регулярным и что перед всеми строками PARTSHAPE будет отображаться «NAME», и между строками NAME / PARTSHAPE будет совершенное чередование 1: 1. Если вы получите две ЧАСТИ подряд, вы потеряете первую. И если PARTSHAPE появится до того, как будет указано первое NAME, вы тоже потеряете его.

...