이 작동 :비슷한 파싱 프로그램 : 다른 하나는 작동하지 않는 이유는 무엇입니까?
<?php
//compare1.php
//**CLASS AND OBJECT
class Entry
{
private $s_ids;
public function __construct()
{
$this->s_ids = array();
}
public function AddS_id($s_id)
{
$this->s_id[] = $s_id;
}
public function SetS_ids($s_ids)
{
$this->s_ids[] = $s_ids;
}
public function GetS_id($i)
{
if ($i > count($s_ids))
throw new Exception('Out of bounds.');
return $this->s_ids[$i];
}
public function GetS_ids()
{
return $this->s_ids;
}
}
//EXTRACTION FUNCTION
function extractS_ids($line)
{
$matches;
preg_match('/^S_id:\s+(.*)\s+$/', $line, $matches);
return $matches[1];
}
//LINE CHECKS
function isStart($line)
{
return preg_match('/^Start.*$/', $line);
}
function isS_id($line)
{
return preg_match('/^S_id:\s+(.*)$/', $line);
}
function isEnd($line)
{
return preg_match('/^End.*$/', $line);
}
//VARIABLE DECLARATION
$fName = 'sample1.txt';
$fh = fopen($fName, 'r');
$line;
$entry;
$entrys = array();
//PARSE OPERATION
if ($fh === FALSE)
die ('Failed to open file.');
while (($line = fGets($fh)) !== FALSE)
{
if (isStart($line)){
$entry = new Entry();
}
if (isS_id($line)){
$entry->SetS_ids(extractS_ids($line));
}
if (isEnd($line)){
$entrys[] = $entry;
}
}
//ARRAY RETRIEVAL
echo "<pre>";
print_r($entrys);
echo "</pre>";
fclose($fh);
?>
이 샘플 파일이 작동하지 않는
Start
S_id: 0611147
S_id: 0651134
End
Start
S_id: 0611125
S_id: 0651125
End
:
<?php
//compare2.php
//CLASS AND OBJECT
class Entry
{
private $titles;
public function __construct()
{
$this->titles = array();
}
public function AddType($title)
{
$this->titles[] = $title;
}
public function SetTitles($titles)
{
$this->titles[] = $titles;
}
public function GetTitle($i)
{
if ($i > count($titles))
throw new Exception('Out of bounds.');
return $this->titles[$i];
}
public function GetTitles()
{
return $this->titles;
}
}
//EXTRACTION FUNCTION
function extractTitles($line)
{
$matches;
preg_match('/^<title>(.*)<\/title>.*$/', $line, $matches);
return $matches[1];
}
//LINE CHECK FUNCTION
function isStart_entry($line)
{
return preg_match('/^<title>.*$/', $line);
}
function isTitle($line)
{
return preg_match('/^<title>.*<\/title>.*$/', $line);
}
function isClose_entry($line)
{
return preg_match('/^<\/list>.*$/', $line);
}
//DECLARATIONS
$fName = 'sample2.txt';
$fh = fopen($fName, 'r');
$line;
$entry;
$entrys = array();
//PARSE OPERATION
if ($fh === FALSE)
die ('Failed to open file.');
while (($line = fgets($fh)) !== FALSE)
{
if (isStart_entry($line)){
$entry = new Entry();
}
if (isTitle($line)){
$entry->SetTitles(extractTitles($line));
}
if (isClose_entry($line)){
$entrys[] = $entry;
}
}
// Dump the results.
echo "<pre>";
print_r($entrys);
echo "</pre>";
// Close the file.
fclose($fh);
?>
이 샘플 파일 :
<list>
<title>Coco</title>
<title>Cafe Milk Tea</title>
</list>
<list>
<title>Strong Off</title>
<title>5% Grapefruit</title>
</list>
로그 똑같은 것 같습니다. 나는 복수형을 검사하고 preg match 기능을 점검했다.
출력 1 :
Array
(
[0] => Entry Object
(
[s_ids:Entry:private] => Array
(
[0] => 0611147
[1] => 0651134
)
)
[1] => Entry Object
(
[s_ids:Entry:private] => Array
(
[0] => 0611125
[1] => 0651125
)
)
출력 2 : compare1.php
의 모든 compare2.php
을 평행하지만, 출력의 차이를 보는 것 같다
Array
(
[0] => Entry Object
(
[titles:Entry:private] => Array
(
[0] => Cafe Milk Tea
)
)
[1] => Entry Object
(
[titles:Entry:private] => Array
(
[0] => 5% Grapefruit
)
)
)
)
파일은 같은 정확히 꽤 많이 할 수있는 방법 , 그리고 두 사람의 후자가 다른 종류의 결과를 반환합니까? [0] => 5% Grapefruit
은 [0] => Strong off; [1] => 5% Grapefruit
이 아니어야합니까? 그리고 [0] => Cafe Milk Tea
은 [0] => Coco; [1] => Cafe Milk Tea
일까요?
나는 예닐곱 배나 지금했던 – zerkms
@zerkms을 펜, 종이를 가지고 선으로 수동으로 코드 라인의 각을 실행합니다. 모든 것이 똑같은 것처럼 보입니다. 나는 어떤 차이도 보이지 않는다. 이제 다시 2 ~ 3 번 더 할 것입니다. 저는 분할보기에서 코드를보고 있습니다.이 코드는 사용자의 요청에 따라 작성됩니다. –
"모든 것이 완전히 같아 보입니다. 차이가 보이지 않습니다"- 코드를 비교하지 않고 중간 결과를 비교하십시오. – zerkms