开发者

php select specific content from input file to put in array elements

I have an input file (exert from file shown below) with multiple lines that I need to select specific text from and put each selection into an array element:

exert from input file:

"BLOCK","PARTNO"

"ELEMENT","HEADER-"

"NAME","1开发者_StackOverflow中文版AB000072186"

"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

Notice that after each occurrence of the line with the phrase "ComponentQty" the content begins repeating...

Where I need the PartNumber that is next to the occurrence of "NAME" in one dimension of the array element and the content next to the occurrence of "PARTSHAPE" in the second dimension for each element. I am very confused on how to do this though...please help!!!


$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);

This should do the basic work. Read a line, explode it into pieces where commas occur. The first part will be the "key", the second part will be the value. Then simply keep reading until we either hit a NAME or a PARTSHAPE key, then store the values as appropriate.

Note that I've not stripped the double-quotes off the values. That's left as an exercise to the reader. This code also assumes that the file's format is regular and that a "NAME" will show up before any PARTSHAPE lines, and there'll be a perfect 1:1 alternation between NAME/PARTSHAPE lines. If you get two PARTSHAPES in a row, you'll lose the first one. And if a PARTSHAPE shows up before the first NAME is encounted, you'll sorta lose that one too.


The following steps worked for me:

The section pasted in my OP (repeating many times more) is defined as $PartNoContents and $BlockData[] is the array that I need to paste selections from $PartNoContents into.

$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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜