2017-12-01 1 views
-2

필드의 전자 메일 주소를 CSV 데이터 행에서 원하지만 목록에 쉼표가 필요합니다.쉼표로 구분 된 전자 메일 주소 목록 인 단일 CSV 필드를 추출하는 방법

따라서 필드 내에서 콘텐츠를 분할하기 때문에이 필드의 내용을 제어 할 수 없습니다. 이는 split 명령을 사용하는 방법 만 알고 있기 때문입니다.

예 데이터 :

# Open file for read 

    while (my $fileLine = <READ>) { 
     chomp $fileLine; 
     my @row = (split ',', $fileLine); 
     print $fileLine[3]\n\n"; 
     } 

12/01/2017, billybob123, [email protected], [email protected], [email protected], AB, [email protected], \\123\abc 
내가 $fileLine[3]를 사용합니다. 내가 원하는 결과는

[email protected], [email protected] 

하지만 나는

[email protected] 

이 필드를 동적 안에 쉼표로 구분 된 이메일 주소의 수를 얻을.

+2

'@'문자가있는 문자열을 잡을 수 있습니까? 'my @addrs = grep {/ @ /} split /,/$ fileLine; ' – toolic

+1

어떻게 할 수 있니? 'A, B, C, D'가 있다면'A'와'B, C'와'D' 필드가 필요한 도구를 어떻게 알 수 있습니까? "필드"가 무엇인지에 대한 기준이 존재하지 않는 한. – zdim

+1

표준 CSV 파싱 라이브러리 사용! 진지하게, 우리는이 질문을 일주일에 몇 번씩받습니다. CSV 구문 분석은 간단하지 않으며 코드는 작성되고 테스트되었습니다. 자신에게 호의를 베풀고 cpan에서 CSV 라이브러리를 찾고 사용하십시오. 그것은 모든 코너 케이스를 처리 할 것입니다. 특정 경우 CSV가 고장난 것처럼 보입니다. 필드에 쉼표가 있으면 따옴표로 묶어야하며 항상 모호한 부분이 있습니다. –

답변

3

먼저 CSV 입력이 끊어졌습니다. 쉼표가 포함 된 입력란은 따옴표로 묶어야합니다. 입력 형식을 변경할 수없는 경우 다음 방법을 제안합니다.

  1. 표준 CSV 구문 분석기를 사용하십시오. 이렇게하면 별도의 필드에 각 이메일을 줄 것입니다.
  2. 이메일 입력란의 경우 적절한 색인 (예에서 세 번째 입력란)에서 시작하여 이메일 주소와 같이 "보이는"필드 값을 누적하십시오. 이메일 주소 정규식은 웹에서 쉽게 찾을 수 있습니다.
  3. 전자 메일처럼 보이지 않는 필드가 발생하면 실제 인덱스 위치에 관계없이 필드가 예상대로 나타나고 그 필드와 그 다음 필드가 4 번째 필드와 같은지 확인하십시오.
+0

감사합니다. 쉼표로 구분 된 필드가 따옴표로 묶여 있다는 것을 알지 못했습니다. – jsvn

관련 문제