2013-03-17 3 views
-2

작업 : 모두가 그 모습,나는이처럼 보이는 txt 파일이 파일을 읽고 내용

<option value="val1">name1</option> 
<option value="val2">name2</option> 
<option value="val3">name3</option> 
<option value="val4">name4</option> 

해당 파일에서 수십 라인이됩니다. 어떻게 그 파일을 읽고 이런 일에 각 라인을 변환 할 수 있습니다 - 파일을 읽을 주머니에 배열로 각 라인을 내용을 추가,

$data['val1'] = 'name1'; 
$data['val2'] = 'name2'; 
$data['val3'] = 'name3'; 
$data['val4'] = 'name4'; 

내가 PHP를 시도하고 내가 붙어있어, 내가 단서가 없다 어떻게 발을 얻기 위해 조각으로 각 라인을 중단하고

답변

0

sed이 좋은 도구입니다 이름을 지정합니다 : 당신의 라인을 맞추어

sed "s|<option value=\"\(.*\)\">\(.*\)</option>|\$data['\1'] = '\2';|g" test.txt 

\(.*\) 섹션이 개 캡처 그룹을 형성한다. 그런 다음 우리는 \1\2을 사용하여 원하는 방식으로 해당 그룹에서 캡처 한 텍스트를 출력 할 수 있습니다.

이것은 html과 일치하는 빠르고 더러운 방법을 찾는 경우에만 유용합니다. html이 예제보다 복잡해지면 정규식이 붕괴되기 시작합니다.

+0

-이 경우에는

당신을 위해 일부 의사 코드 ... name1/2/3/4/etc 될 것입니다 – Lix

+0

'sed'가 트릭을했는데, –

0

각 행마다 행을 읽고 싶으면 strip_tags() 기능을 수행하십시오. 이렇게하면 모든 HTML 요소가 제거되고 텍스트 데이터 만 남게됩니다. [;) 실제로 붕괴 (http://stackoverflow.com/questions/1732348/regex-match-

$file = fopen("your_file.txt", "r"); // open the file in read-only mode 
$index = 1; // track the line number you are currently on 
$finalArray = array(); // prepare final array to be populated 
while (!feof($file)) { // loop over the entire file, line by line 
    $line = fgets($file); // retrieve the current line of the file 

    // parse string into DOM object 
    $dom = new DOMDocument(); 
    $dom->loadHTML($line); 
    // extract the option tag for this line 
    $tags = $dom->getElementsByTagName('option'); 
    // iterate over the tag list (in our case there will only be one) 
    foreach ($tags as $tag) { 
    // extract the "value" parameter for the key 
    // and perform strip_tags() on the contents 
    $finalArray[$tag->getAttribute('value')] = strip_tags($line); 
    } 
} 
fclose($file); 
+0

'value' 그것은 각 줄마다 다르다. val + number가 아니다. –

+0

@adr - 나는 약간의 변경을했다. 이것은 당신이 지금 찾고있는 것이어야합니다. – Lix

+0

해당 파일에 형식이 잘못된 HTML을 조심해야합니다. 오류가있는 경우 제대로 처리했는지 확인하십시오. – Lix