2009-12-09 7 views
1

나는 형식에 TEXTFILE을 읽고 있어요PHP 문자열 조작

전화 번호 (탭) 텍스트 (줄 바꿈) (줄 바꿈)

또는 더 구체적으로

4799999999 Hey! You owe us $576.53. Pay up to account no. 9760.00.12345, ID: 201561438. 

4798888888 Hey! You owe us $199. Pay up to account no. 9760.05.12345, KID: 201565173. 

4797777777 Hey! You owe us... and so on. 

내가 원하는 이것을 SQL 데이터베이스에 저장하려면 전화 번호와 텍스트를 구분해야합니다.

PHP에서 문자열을 쌍으로 분할하는 방법에 대한 아이디어가 있으십니까? SQL에 저장하기 전에 이러한 값을 Array에 저장해야합니까, 아니면 그냥 저장해야합니까?

+0

와우, 너희들은 빨리 대답 해! 나는 여기까지 따라 가기 힘든 시간을 보내고있다. :) – Frode

답변

6

줄 단위로 파일을 읽고 탭 자동차의 각 줄을 분할 한 다음 DB 플랫폼에 적합한 SQL을 사용하여 DB에 넣습니다.

어느 부분에서 문제가 있습니까?

+0

그것은 지금 내 주요 관심사 인 문자열을 깨는 전체입니다. 단순화를 위해 +1 – Frode

+1

+1. OP :'explode ("\ t", $ line, 2)'를 사용하여 * first * tab char에서만 줄을 나눕니다. – jensgram

1

정규식을 사용하여 문자열을 분리 한 다음 SQL을 사용하여 데이터베이스에 입력 할 수 있습니다.

^([0-9]{10})(.*) 

첫 번째 캡처 그룹과 전화 번호, 두 번째 캡처 그룹과 나머지 텍스트를 다시 가져올 것입니다.

+0

어, 네. 나는 당신이 정규식으로이 일을 할 수 있다고 생각했는데, 어떻게 작동하는지 모르겠다. 정말로 ... 나는 PHP에서 처음으로 익숙하다. 정규식에 대해서는 전혀 모른다. 그것을 위해. – Frode

+0

다른 솔루션을 살펴보면 '폭발'을하는 것이 더 나을 것입니다. 여기 RegEx를 사용하면 일이 지나치게 복잡해질 것입니다. : P –

+0

일부 정규식에는 항상 여지가 있습니다. –

3

각 줄에 탭 (\t) 구분 기호가있는 explode 기능을 사용하십시오. 파일을 가정

4
$data = file_get_contents ($file); // Assuming $file holds path to file 
if ($data) { 
    $lines = explode("\n\n", $data); 
    foreach ($lines as $line) { 
     list ($phone, $message) = explode("\t", $line, 2); 
     // do whatever you need with it 
    } 
} 
+0

'explode'의 세 번째 인수로'2'를 전달하는 것을 고려하십시오. – jensgram

+0

감사합니다. 한도를 추가했습니다. –

+0

좋아요, 지금 이걸 시도해 봤는데 문자열을 첫 번째 전화 번호로 나눈 다음 파일의 나머지 부분을 모두 나눕니다. 파일 문자 인코딩 때문에 줄 바꿈이 다릅니 까? – Frode

1

가 큰되지 않습니다, 당신은 단지 file()와 배열로 라인을 읽고 너무처럼 반복 할 수 있습니다

$lines = file($filename); 

foreach($lines as $line) { 
    $line_arr = explode("\t", $line, 2); 

    if(!empty($line_arr)) { 
    // $line_arr[0] will be the phone number and 
    // $line_arr[1] will be the text; insert them into your database 
    // however you please. 
    } 
} 
1

을 난 당신이를 사용하여 더 나을 거라고 생각 텍스트 부분에 탭이있는 경우 strpos 기능. 파일이 특히 크다면

$lines = file($filename); 

foreach ($lines as $line) 
{ 
    $tab = strpos($line, "\t"); 
    $num = substr($line, 0, $tab); 
    $text = substr($line, $tab); 
} 

fopenfgets ( see example)와 file 기능 foreach 바꾸기.

+0

explode()의 세 번째 매개 변수는 $ limit입니다. 그러면 첫 번째 탭 이후에 대해 걱정하지 않아도됩니다. –

+0

오늘 내가 뭔가를 배웠던 것 같습니다. 요르단에게 감사드립니다.실제로 나는 더 나은 성능을 가진 것을 보는 것에 흥미가있을 것이다. (꽤 작은 차이 TBH가 될 것이지만) – DisgruntledGoat