2012-01-11 3 views
-1

이 작동 :비슷한 파싱 프로그램 : 다른 하나는 작동하지 않는 이유는 무엇입니까?

<?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일까요?

+1

나는 예닐곱 배나 지금했던 – zerkms

+0

@zerkms을 펜, 종이를 가지고 선으로 수동으로 코드 라인의 각을 실행합니다. 모든 것이 똑같은 것처럼 보입니다. 나는 어떤 차이도 보이지 않는다. 이제 다시 2 ~ 3 번 더 할 것입니다. 저는 분할보기에서 코드를보고 있습니다.이 코드는 사용자의 요청에 따라 작성됩니다. –

+1

"모든 것이 완전히 같아 보입니다. 차이가 보이지 않습니다"- 코드를 비교하지 않고 중간 결과를 비교하십시오. – zerkms

답변

1

isStart_entry 함수가 <list> 대신 <title>을 찾고 있습니다. 다음과 같이 코딩해야합니다

function isStart_entry($line) 
{ 
    return preg_match('/^<list>.*$/', $line); 
} 
+0

예, 친구. 나는 두 번 더 그것을 겪었고 나는 그것을 보지 못했다. 나는 방금 잘못된 장소에서 's'을 발견했다. 고맙습니다. –

+0

'\ s + $'이 왜 작동하고'. * $'이 추출 기능에서 작동하지 않는지 아십니까? 전체 배열 대신'. * $'을 사용할 때만 두 번째'S_id' 또는''을 얻습니다. 닫는 인용 부호 뒤에'. * $'이 사용되고 속성을 완성하는''{1,}'이 (가) 사용되며'\ s +'는 사용할 수 없기 때문에'html attributes ' '역시'\ r \ n '과 일치하고'[^ \ r \ n]'처럼 그렇게하지 않는 방법이 있습니까? – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="clearfix"> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048821"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> 최근 질문 </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://ko.uwenku.com/question/p-bfcczvyi-yt.html" target="_blank" title="테이블 뷰 셀에 App Delegate의 배열 데이터를 표시 할 수 없습니다."> 테이블 뷰 셀에 App Delegate의 배열 데이터를 표시 할 수 없습니다. </a> </li> <li class="side_article_list_item"> 2. <a href="http://ko.uwenku.com/question/p-tlkhmcpi-yp.html" target="_blank" title="순회은/파이썬"> 순회은/파이썬 </a> </li> <li class="side_article_list_item"> 3. <a href="http://ko.uwenku.com/question/p-qkqnryjq-wn.html" target="_blank" title="내 WordPress 테마의 functions.php에 필터를 추가 할 위치는 어디입니까?"> 내 WordPress 테마의 functions.php에 필터를 추가 할 위치는 어디입니까? </a> </li> <li class="side_article_list_item"> 4. <a href="http://ko.uwenku.com/question/p-udamthyd-xc.html" target="_blank" title="투명한보기 배경이 검은 색으로 변합니다."> 투명한보기 배경이 검은 색으로 변합니다. </a> </li> <li class="side_article_list_item"> 5. <a href="http://ko.uwenku.com/question/p-fuolbnen-wz.html" target="_blank" title="응용 프로그램이 충돌합니다"> 응용 프로그램이 충돌합니다 </a> </li> <li class="side_article_list_item"> 6. <a href="http://ko.uwenku.com/question/p-cuidxqxs-sv.html" target="_blank" title="왜 P! = "P"가 내 JSON 응답에 있습니까?"> 왜 P! = "P"가 내 JSON 응답에 있습니까? </a> </li> <li class="side_article_list_item"> 7. <a href="http://ko.uwenku.com/question/p-wmqqrrve-ud.html" target="_blank" title="firebase에 이미지 업로드"> firebase에 이미지 업로드 </a> </li> <li class="side_article_list_item"> 8. <a href="http://ko.uwenku.com/question/p-cdydfysg-ts.html" target="_blank" title="내 애니메이션의 일부가 부드럽게 전환되지 않습니다. 누구든지이 문제를 해결하기 위해 어디를 봐야하는지 알고 있습니까?"> 내 애니메이션의 일부가 부드럽게 전환되지 않습니다. 누구든지이 문제를 해결하기 위해 어디를 봐야하는지 알고 있습니까? </a> </li> <li class="side_article_list_item"> 9. <a href="http://ko.uwenku.com/question/p-xfeibanm-to.html" target="_blank" title="텔레 그램 및 FB 링크 미리보기"> 텔레 그램 및 FB 링크 미리보기 </a> </li> <li class="side_article_list_item"> 10. <a href="http://ko.uwenku.com/question/p-hyigbisk-th.html" target="_blank" title="AWS EC2 볼륨 수정 누락되었습니다"> AWS EC2 볼륨 수정 누락되었습니다 </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> 관련 문제</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">관련 문제 없음^_^</li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://ko.uwenku.com/contact">문의하기</a></li> <li>© 2020 KO.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>