2017-01-11 1 views
0

텍스트 파일에서 데이터를 가져 와서 데이터를 데이터베이스로 전달하려고합니다. 문제는 뷰를 새로 고침 할 때마다 데이터가 전송되고 중복 데이터가 발생한다는 것을 의미합니다. 이러한 일이 발생하지 않도록하는 방법이 있습니까? 아마도 파일을 잘라내거나 처리 된 마지막 줄의 줄 번호를 저장하는 것일까 요?다시로드 할 때 중복 데이터보기

또한 텍스트 파일 생성 방법은 파일 이름에 날짜가있는 새 텍스트 파일을 매일 얻는 것이므로 어쩌면 내가 생각했던 또 다른 접근법은 내가 태그를 붙일 새로운 데이터베이스 테이블을 만드는 것이 었습니다 각 파일은 "프로세스"로 처리되므로 함수는 한 번 이상 동일한 파일을 처리하지 않습니다.

1618 0002 9 9 505 04129284134 4141191269 4141191269 56984 4  002 001 4 

1606 0000 9     1159 4169191388 4169191388  4  012  0 

1607 0009 7 9 505 04129284134   1245   1245 56984 4   

1619 0000 9 6    1172 2129922686 2129922686  4  013  0 

1606 0000 9     1159 4169191388 4169191388  4  012  0 

1607 0009 7 9 505 04129284134   1245   1245 56984 4   

1619 0000 7 6 521   1188#   1172   1172  0   001 4 

1606 0000 9     1159 4169191388 4169191388  4  012  0 

1607 0009 7 9 505 04129284134   1245   1245 56984 4   

을 그리고 여기 내 루트 파일을 사용하고 기능입니다 :

다음은 텍스트 파일의 예

Route::get('calls', function() { 
    foreach (file(public_path() . "/calls.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) { 
     $calls     = new Calls(); 
     $calls->time   = trim(substr($line, 0, 4)); 
     $calls->duration  = trim(substr($line, 5, 4)); 
     $calls->cond_code  = trim(substr($line, 10, 1)); 
     $calls->code_dial  = trim(substr($line, 15, 1)); 
     $calls->code_used  = trim(substr($line, 18, 3)); 
     $calls->dialed_num  = trim(substr($line, 24, 11)); 
     $calls->calling_num = trim(substr($line, 39, 11)); 
     $calls->clg_num_in_tac = trim(substr($line, 53, 11)); 
     $calls->auth_code  = trim(substr($line, 64, 5)); 
     $calls->frl   = trim(substr($line, 70, 1)); 
     $calls->ixc_code  = trim(substr($line, 77, 3)); 
     $calls->in_crt_id  = trim(substr($line, 85, 3)); 
     $calls->save(); 
    } 
    return View::make('test') 
     ->with('calls', Calls::all()); 

}); 
+0

txt 파일 또는 탭으로 구분 된 CSV입니까? – Jeff

+0

'get' 경로를 통해 양식 요청을 처리하는 것은 나쁜 습관입니다. 아래의 내 솔루션을 살펴보고 적합한 지 확인하십시오. – Gayan

+0

@Jeff 고정 너비 열이있는 텍스트 파일입니다. –

답변

0

문제가 구현이다.

중복을 제한해야하는 경우 각 입력을 데이터베이스 레코드와 일치시켜야합니다.

그러나 이것은 매우 나쁜 디자인이며 매우 분별력이 있습니다.

대신 양식에 file input 입력란을 추가하고 양식을 POST 입력하십시오. 그런 다음이 양식을 처리하십시오.

Route::post('calls', function() { 
    // your code goes here... 
}); 

일단 완료되면 다른 경로로 리디렉션 할 수 있습니다.

+0

것은 양식을 사용하지 않는 것입니다. 디렉토리에서 파일을 가져 와서 정보를 파싱 한 다음 테이블에 데이터를 표시합니다. –

관련 문제