2017-11-13 13 views
-1

정규식을 어떻게 배열에 적용합니까? 내 csv 파일에서 읽는 동안 나는 ...Perl 포함 된 쉼표로 CSV를 효율적으로 구문 분석하고 데이터베이스에 추가

 s/, /- /g; 
     s/1,000/1000/g; 

이 적용하지만 내 다차원 배열에 데이터를 입력 한 후 내 필드에 다시 쉼표를 삽입하는 방법을 모르겠어요.

+0

내 출력은 다음과 같습니다 RESULTS ... "총 농장 부가가치 감자 (달러 X 1000)" – kathleen

+0

나는 귀하의 질문에 완벽하지 않다. 쉼표를 제거했지만 다시 쉼표를 넣으려고합니까? –

+0

가입을 사용해 보셨습니까? 'perldoc join ' –

답변

0

먼저이 기능을 구현하는 데 사용할 수있는 CSV 모듈이 몇 가지 있지만 일부 경우 사람들이 패키지를 액세스 할 수 없거나 이유 때문에 패키지를 설치할 수 없다는 것을 알고 있습니다. 따라서이 경우 도움이됩니다.

올바르게 입력하면 쉼표가 포함 된 CSV의 입력란을 작성하려고합니다.이 경우 입력란에 괄호 또는 괄호가 있어야만 볼 수 있습니다. CSV의 쉼표로 필드를 구분합니다. 그런 다음 CSV의 모든 데이터를 가져올 수 있습니다.

"Potatoes 1,000", (Tomatoes, 200), "(GemSquash, 1,029.95)" 
       ^   ^

이 내장 된 쉼표 :

"Potatoes 1,000", (Tomatoes, 200), "(GemSquash, 1,029.95)" 
     ^   ^    ^^ 
이는 CSV 쉼표를 보여

이 경우 우리는 괄호, 따옴표를 사용하고 모두 포함 된 쉼표를 사용하는 데이터를 표시하는 CSV있을 것이다

그래서 아래에서는 괄호와 큰 따옴표를 사용하여 데이터를 검색하고 바꿔 CSV 쉼표와 포함 여부를 확인합니다.

use strict; 
use warnings; 

my $string = '(Potatoes 1,000), "Tomatoes, 200", "(GemSquash, 1,029.95)"'; 
my $query = qr/(?: "\(([^()""]*) \)" | \(([^()]*) \) | " ([^"]*) " | ([^,]*)) , \s* /x; 
my @results = grep defined, "$string," =~ /$query/g; 
print "$_\n" for @results; 

Potatoes 1,000 
Tomatoes, 200 
GemSquash, 1,029.95 
-2

CSV를 구문 분석하려면 Text::CSV과 같은 CPAN 모듈을 사용하십시오. 당신은 반환 값에 대한 정규식을 사용할 수 있습니다.