2016-07-25 4 views
0

테이블 데이터를 생성하여 파일에 기록해야합니다. 출력 파일은 다음과 같은 모양입니다 : | AAAA | bbba | 그것은 하나의 행을 생성하여 그것을 쉽게열을 기준으로 파일에 값을 입력하십시오.

123|aaaa|bbba| 
124|aaab|bbbb| 
125|aaac|bbbc| 

(123)처럼, \ n과 쓰기,하지만 난 하나의 열을 생성 할 필요가 발전기에 성능 문제가 있기 때문에 그것을 쓰고 다른 것을 생성하십시오.

123| 
124| 
125| 

다음 : 마지막으로

123|aaaa| 
124|aaab| 
125|aaac| 

그리고 :

123|aaaa|bbba| 
124|aaab|bbbb| 
125|aaac|bbbc| 

내 현재 코드 모양 같은 :

내가 좋아하는 뭔가를 파일에 쓸 필요가 for 루프에서

os = new BufferedOutputStream(new FileOutputStream(filename)); 
StringBuffer column = new StringBuffer(); 
for (int i = 0; i < numberofcolumns; i++) { 
    for (int j = 0; j < width; j++) { 
     column.append(columns[i].genValue()); 
     column.append("|\n"); 
    } 
    os.write(column.toString().getBytes(), 0, entry.length()); 
} 
+1

현재 출력을 추가 할 수 있습니까? –

+0

모든 솔루션은 절대적으로 비효율적입니다. 매우 복잡한 경우 열 단위로 작성할 필요가 없도록 작성하십시오. 각 열을 다른 파일에 쓰고 마지막에는 그 파일을 연결하는 것이 훨씬 좋습니다. – xenteros

답변

1

왜 즉시 파일에 쓰고 다시 열 때마다 하시겠습니까? 내부적으로 저장하고 모든 데이터가 생성 된 후에 파일에 기록 하시겠습니까?

3 차원 배열을 선언하고 그 배열에 데이터를 쓸 수 있습니다. 이 작업이 끝나면 배열을 파일에 씁니다. 많이 쉬워야합니다.

0

이 정말 나쁜 생각처럼 보이지만 paste을 달성 할 수있다 :

$ echo """a 
> b 
> c 
> d""" > testFile 

$ echo """1 
> 2 
> 3 
> 4""" | paste -d"|" testFile - > modifiedFile 

$ cat modifiedFile 
a|1 
b|2 
c|3 
d|4 

그것은 나쁜 생각처럼 보이는 이유 : 발전기가 느릴 수 있지만

  • , 나는 의심 출력 할 열의 수는 스로틀입니다. 데이터 검색/필터링 등의 작업이 느려질 수 있습니다.
  • 각 열의 데이터가 동일한 순서로 반환되는지 확인할 수 있습니까?
  • 새 열을 가져올 때마다 파일을 다시 쓰는 것은 매우 느립니다. 각 열의 데이터를 메모리 (예 : bash 배열)에 저장하고 완료 한 후에 파일을 쓸 수 없습니까?
관련 문제