2012-05-22 2 views
1

상당량의 데이터가 MySQL 데이터베이스로 가져와야합니다. 쉼표 및 탭으로 구분 된 데이터를 가져 오는 데 익숙하지만,이 형식이 다른 경우 가장 간단한 용어로 형식을 설명하려고합니다.PHP와 MySQL을 사용하여 쉼표로 분리 된 데이터를 txt 파일로 처리하기

XXX XXX XXX

또는 때문일 수 있습니다 :

는 그래서 될 수

XXX X XXX

또는 때문일 수 있습니다 :

X  X XX

나는 공간이 제대로 보여 바랍니다! 그렇다면 공백, 탭 또는 쉼표로 구분 된 3 개의 섹션이있는 대신 각 문자에 할당 된 공백이 있음을 알 수 있습니다. (그들은 공백으로 기술적으로 구분되지만 숫자가 다르다).

내가해야할 것은 문자 1, 2 및 3이 DB에서 field_1에 들어간다는 것입니다. 문자 4는 항상 공백이며 문자 5, 6 및 7은 field_2 등으로 들어갑니다. 기본적으로 각 섹션은 자체 필드에 있어야합니다.

이제 모든 필드를 임시 테이블에 가져 와서 SUBSTR()을 사용하여이 데이터를 위에서 설명한대로 올바른 형식으로 정렬 할 수 있다고 가정합니다.

하지만 조금 길어 보입니다.

더 좋은 방법이 있나요? DB 파일의 올바른 형식으로 텍스트 파일에서 직접 가져오고 싶습니다. 추가 단계를 거치지 않아도됩니다.

감사

+3

을,하지만 난 순수한 SQL에서 그것을 할 것입니다. 각 줄을 읽은 다음 http://php.net/manual/en/function.substr.php를 사용하여 3 개의 변수를 가져 와서 삽입하십시오. – Nanne

+0

+1 Nanne의 덧글 –

+0

이것은 "고정 폭 데이터"라고 불리우며, 매우 일반적입니다. 예를 들어 여기를 참조하십시오 : http://stackoverflow.com/questions/3876092/importing-fixed-width-text-files-to-mysql-with-php – mellamokb

답변

-1

substr()은 하나 개의 옵션이지만, 정규 표현식은 작업하기 더 우아한 수 있습니다. 3을 통해 문자 하나 하나 개의 필드와, 다른를 할 수있다 (7)을 통해 5입니다 귀하의 예를 ... 들어

preg_match('/^(.{3}).(.{3})$/', $line_of_data, $matches); 
$field_one = $matches[1]; 
$field_two = $matches[2]; 

이 분명 단순화 된 예입니다,하지만 난 생각 당신은 데이터의 많은 "분야"에있는 경우 함께 작업 할 경우, substr() 대신 일반 표현식을 사용하여 장기간에 걸쳐 작업하는 것이 훨씬 즐겁습니다.

+0

Thanks Garret. 나는 정규 표현식을 더 자주 사용하는 의미를 지니고있다. 나는 네가 옳다고 생각한다. 당신의 대답이 왜 투표로 내려 졌는지 확신 할 수 없지만, 코멘트는 유용 할 것입니다. 그러나 그것은 의도하지 않았다고 생각합니다. – user1100149

+0

누가 알습니까. 그러나 그것을지지하거나 심지어 그것을 받아들이는 것으로 무자헤기에 대한 공의를 타파하십시오. = P –

0

PHP substr() 경로를 사용해 보았지만 작동했지만 각 행을 순환하는 데이터를 처리하는 데 오랜 시간이 걸렸으며 처리 할 레코드가 수십만 개라고 느꼈습니다. 너무 느렸다.

는 다른 방법으로, 나는 매우 빠르게 데이터를 처리하는이 간단한 SQL 솔루션, 발견 : 당신은 SUBSTR을 사용할 수 있습니다

LOAD DATA LOCAL 
    INFILE 'fixed-width-data.txt' 
INTO TABLE 
    my_table (@line) 
SET 
    field_1 = SUBSTR(@line,1,3), 
    field_2 = SUBSTR(@line, 5,3), 
    field_3 = SUBSTR(@line, 9,3)  
관련 문제