2017-12-26 7 views
0

저는 TSV 파일을 받아 처리하고 응답을 출력하는 프로젝트 작업을하고 있습니다. 내 친구이자 나는 Heroku와 Spark를 사용하여 Java 기반 프로그램을 웹 응용 프로그램으로 만듭니다.TSV 파일 처리

현재 우리 웹 응용 프로그램은 특정 .tsv 파일에서만 작동하며 다른 응용 프로그램에서는 작동하지 않으며 .tsv 파일의 특정 인코딩과 관련된 문제라고 생각합니다.

입력 파일은 Google 스프레드 시트 문서에서 생성 된 .tsv 파일이지만 현재 Google 프로그램은 올바르게 구문 분석 할 수 없습니다. 그러나인데, Google 스프레드 시트의 데이터를 복사하여 텍스트 파일에 붙여 넣은 다음 .tsv 파일로 저장하면 프로그램에서 성공적으로 처리 할 수 ​​있습니다. 두 파일의 내용이 동일하고 텍스트 형식이 동일하지만 다른 파일은 작동하지 않으므로 이상하게 보입니다.

이 버튼이 클릭되면 호출 내 같이 sendData() JS 함수이다

public static void main(String[] args) 
{ 
    port(getHerokuAssignedPort()); 
    staticFileLocation("/public"); 
    get("/ping", (req, res) -> "pong"); 
    post("/rides", (req, res) -> { 
     System.out.println("parsing..."); 
     final RawParticipants participants = parser.parseInitialRequest(req.body()); 
     final AssignedRides result = orchestrator.orchestrateRides(participants); 
     System.out.println(participants); 
     return result.toString(); 
    }); 
} 

출력 : 그것은 자바를 통해 요청을 입력 받아 판독 여기서

여기
function sendData() { 
     var fr = new FileReader(); 
     fr.onload = function(event) { 
      var result = event.target.result; 
      $.post("/rides", result, function(result, error) { 
       result = result.replace(/\n/g, "<br>"); 
       $(".result").html(result); 
      }); 
     }; 
     var rides = $("#rides"); 
     var files = rides[0]['files']; 
     var file = files[0]; 
     fr.readAsText(file, 'ASCII'); 
    } 

은 다른 .tsv 파일에 따라 다르지만 Google 스프레드 시트에서 다운로드 한 파일은 모두 올바르게 구문 분석 될 수 없습니다. 프로그램에서 Google 스프레드 시트의 파일에있는 내용을 읽을 수 없거나 일부 줄을 읽을 수는 있지만 다른 줄을 읽을 수는 없습니다. 내 안에는 데이터에 특별한 것이 없다. 일반 텍스트 만 탭으로 구분됩니다. Google 스프레드 시트가 .tsv 파일을 인코딩하는 방법을 살펴 봤는데 복사/붙여 넣기에서 생성 된 .tsv 파일과 동일한 ASCII 인코딩과 다른 특별한 것으로 보이지 않습니다. 그래서 저는이 문제를 해결하는 방법에 대해 약간 혼란 스러울뿐입니다. 특히 똑같은 정보로 .tsv 파일을 입력 할 수 있고 방금 생성 된 프로그램이 성공적으로 읽었을 때 더욱 그렇습니다.

누구나 특정 .tsv 파일을 처리 할 수없는 이유를 알고 있으며 해결책은 무엇입니까? 감사! 필요한 경우 더 많은 정보를 기꺼이 제공 할 것입니다.

+0

req.body() 대신'new String (req.bodyAsBytes(), StandardCharsets.UTF_8)'같은 것을 시도해 보셨습니까? – codefinger

+0

문제가 로컬에서 발생하거나 Heroku에서만 발생합니까? – codefinger

+0

@codefinger 그냥 슬프게도 당신의 제안을 시도했다. 앱에서 여전히 Google 스프레드 시트에서 생성 한 .tsv 파일을 올바르게 구문 분석 할 수 없습니다. 귀하의 두 번째 질문에 관해서는, 나는 당신이 무엇을 의미하는지 확실히 모르겠지만 무엇보다도, 나는 그 문제가 Heroku와 함께 있다고 생각하지 않습니다. 어떻게 든 내 프로그램은 인코딩 때문에 특정 .tsv 파일을 읽을 수 없으며 난 그냥 난처한 상황에 처하게됩니다. 파서가 올바르게 작동하는지 확인하기 위해 단위 테스트를 작성했으며 탭으로 구분 된 텍스트를 성공적으로 파싱합니다. 그러나 Sheets에서 .tsv 파일을 발견하면 그냥 헷갈 리게됩니다. – Aaron

답변

0

나는이 문제를 해결하는 동안 잠시 멈추었지만 문제를 해결할 수있었습니다. .tsv 파일 구문 분석이 제대로 작동하지 않는 이유는 웹 사이트에서 다운로드 할 때 Google 스프레드 시트에서 생성 된 CRLF 행 종결자가 원인 이었기 때문입니다. 이것은 어떤면에서는 인코딩 오류이지만 심층적 인 파일 편집으로 해결할 필요는 없습니다. 필자가해야 할 일은 "/ r/n"을 정규 "/ n"으로 대체하여 .tsv 파일의 새로운 줄을 나타 내기 위해서였습니다. 그 라인 터미네이터는 각 라인의 끝 부분에 놓 였고 파일을 올바르게 읽었습니다. 따라서이 문제를 해결하기 위해 필자는 사용하는 줄 바꿈에 대한 기본 표기법으로 바꾸어야했습니다. "/ n". 빌라! 결정된.