2009-03-06 2 views
18

Perl에서 파일에 쓰려고합니다. 난 그냥 탭으로 구분 된 형식으로 데이터를 쓰고 싶다. 그러나 필자가 작성한 데이터의 길이는 다양하며 줄 지어 있지 않습니다.Perl에서 정렬 된 열에 텍스트를 쓰려면 어떻게해야합니까?

Name Education Fav_Car MoneyInBank 
josh High School Porche 500 
SomeOtherName PHD Hyundai 50000 

난 그냥 데이터는 내가 위에있는 헤더 줄 싶지 :

예를 들어 나는 이런 식으로 뭔가를 쓰기 위해 노력하고 있어요.

나는과 같이 데이터를 출력하고 텍스트 편집기에서 열면 일치하지 않습니다 (필드의 길이가 일치하지 않습니다)

printf FILE ("%s%20s%20s\n", "Name", "Ed", "Car"); 
while (($name, $ed, $car) = $sth->fetchrow_array) { 
     printf FILE ("%s>>>>>>>>>>>>>%40s%40s\n", $name, $ed, $car); 
}; 

답변

26

탭으로 구분 된 데이터를.

솔루션 :

  • 열기 스프레드 시트 파일.
  • 워드 프로세서에서 열고 텍스트를 모두 선택하고 적절한 탭 정지를 정의하십시오. (thanks, Justsalt)
  • 텍스트 편집기에서 탭 너비를 필드보다 큰 값으로 설정하십시오.
  • 탭 대신 공백을 사용하십시오 (예 : printf, 너비는 formats).

예를 들어, %

printf("%-15s %-15s %-10s %9s\n", $name, $edu, $car, $cash); 

-를 사용할 수있는 필드는 왼쪽으로 정렬됩니다. 숫자 (예 : money)는 일반적으로 오른쪽 정렬됩니다 (기본값).

+1

또는 워드 프로세서에서 열고 적절한 탭 정지를 정의하십시오. – Justsalt

6

Perl format 명령을 살펴보십시오.

+0

새로운 프로젝트에는 형식을 사용하지 않고 대신 Perl6 :: Form을 사용합니다. –

1

의 printf 20 개 문자 필드의 C. 같이이 작업을 수행합니다

printf("%20s%20s%20s$20S\n",$name,$ed,$car,$money); 
+0

왼쪽 맞춤을 위해서는 % -20이어야합니까? –

+0

어떻게 왼쪽 정렬 할 수 있습니까? –

+0

@styris :이 질문에 대한 Daniel L의 의견을 참조하십시오! –

2

,

1

printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car"); 
Linux에서 작업하는 경우, 쉬운 솔루션이 함께 column 시스템 명령을 사용하는 것입니다 - t 플래그. 공백으로 구분 된 표를 파일로 인쇄하고 해당 파일에 대해 column 명령을 사용하면됩니다.

system("column -t file > new_file"); 
관련 문제