영어프랑스어스페인어

Ad


온웍스 파비콘

ffe - 클라우드의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 ffe 실행

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 명령 ffe입니다.

프로그램:

이름


ffe - 플랫 파일 추출기

개요


fffe [옵션] ...

기술


fffe 플랫 파일 레코드에서 필드를 추출하여 표시하는 프로그램입니다.
다른 형식. fffe 입력 파일 구조를 제어하기 위해 구성 파일에 의존
및 출력 형식.

옵션


fffe 다음 옵션을 허용합니다.

-c, --구성=파일
다음에서 구성 읽기 파일, 기본값은 ~/.fferc.

-s, --구조=구조
입력 파일은 구조를 사용하여 처리됩니다. 구조.

-p, --인쇄=FORMAT
출력 형식 사용 FORMAT 인쇄용. 형식을 사용하여 모든 인쇄를 억제할 수 있습니다.
아니. 원본 데이터는 형식을 사용하여 인쇄됩니다. 살갗이 벗어 진.

-o, --출력=이름
에 출력 쓰기 이름 표준 출력 대신.

-f, --필드 목록=LIST
쉼표로 구분된 목록에 지정된 필드 및 상수만 인쇄 LIST.

-e, --표현=표현
해당 레코드만 인쇄하십시오. 표현 참으로 평가됩니다.

-a, --과
표현식은 논리와 결합되며 기본값은 논리 또는입니다.

-X, --casecmp
표현식은 대소문자를 구분하지 않고 평가됩니다.

-v, -- 반전 일치
표현식과 일치하지 않는 레코드만 인쇄합니다.

-l, --헐렁한
잘못된 입력 라인으로 인해 프로그램이 중단되지 않습니다.

-r, --교체==VALUE
교체 내용 VALUE 출력에서. VALUE 와 동일한 지시문을 포함할 수 있습니다.
출력 옵션 데이터.

-d, -디버그
모든 잘못된 입력 라인은 ffe_error_ 파일에 기록됩니다. .통나무.

-I, --정보
구성 파일에 구조 정보를 표시하고 종료합니다.

-?, --도움
사용 가능한 모든 옵션과 해당 의미를 나열하고 종료합니다.

-V, --번역
프로그램 버전을 표시하고 종료합니다.

나머지 모든 인수는 입력 파일의 이름입니다. 입력 파일이 지정되지 않은 경우
표준 입력을 읽습니다.

(선택권 -이자형, --표현)
표현식을 사용하여 필드 값을 비교하는 특정 레코드를 선택할 수 있습니다.

경우 가치 문자열 "file:"로 시작하고 나머지는 가치 파일로 간주됩니다
이름. 파일의 모든 행은 비교 값으로 사용됩니다. 다음과 같은 경우 레코드가 선택됩니다.
하나 이상의 값이 true로 평가됩니다.

식 표기법:

=가치
필드가 있는 경우 레코드가 선택됩니다. 값과 같습니다 가치.

^가치
필드가 있는 경우 레코드가 선택됩니다. 값으로 시작 가치.

~가치
필드가 있는 경우 레코드가 선택됩니다. 값을 포함 가치.

!가치
필드가 있는 경우 레코드가 선택됩니다. 값과 같지 않음 가치.

?가치
필드가 있는 경우 레코드가 선택됩니다. 의 정규식과 일치합니다.
가치.

FFE 구성


fffe 입력 파일에서 필드를 추출하기 위해 구성 파일을 사용하고
출력을 위한 필드 형식 지정. 입력 파일의 모든 라인 또는 바이너리 블록은
기록으로 간주됩니다. 기본 구성 파일은 ~/.fferc 그러나 다른 파일은
'-c' 옵션과 함께 제공됩니다.

구성 파일 fffe 텍스트 파일입니다. 파일에 빈 줄이 포함될 수 있습니다. 명령은
대소문자를 구분합니다. 주석은 #-문자로 시작하여 줄 끝에서 끝납니다.
XNUMXD덴탈의 이륜 전차 정의는 큰따옴표 '"' 문자로 묶을 수 있습니다. 이륜 전차
단일 문자입니다. 이륜 전차 다음 이스케이프 코드를 포함할 수 있습니다.
'\a','\b','\t','\n','\v','\f', '\r', '\"' 및 '\#'. 문자 '\'는 '\\'로 이스케이프 처리합니다.

명령 대체를 통해 명령 출력이 구성의 일부를 대체할 수 있습니다.
파일. 명령 대체 구문은 다음과 같습니다.
`명령`
XNUMXD덴탈의 명령 실행되고 `명령`는 표준 출력으로 대체됩니다.
모든 후행 줄 바꿈이 삭제 된 명령. 명령 대체는 중첩될 수 없습니다.

실행하기 전에 명령 ffe는 몇 가지 환경 변수를 설정합니다.

FFE_구조
-s,--structure를 사용하여 주어진 구조의 이름입니다.

FFE_OUIPUT
-o,--output을 사용하여 지정된 출력 파일의 이름입니다.

FFE_포맷
-p,--print를 사용하여 지정된 출력 형식의 이름입니다.

FFE_FIRST_FILE
첫 번째 입력 파일의 이름입니다.

FFE_파일
모든 입력 파일의 목록입니다.

변수가 이미 설정되어 있으면 대체되지 않습니다.

입력 파일 구조
입력 파일 구조는 키워드로 지정됩니다. 구조:

구조 name {옵션...}

옵션은 개행으로 끝나야 합니다. 옵션은 다음과 같습니다.

유형 고정||구분 [이륜 전차] [*]
입력의 필드는 고정 길이 텍스트 필드, 고정 길이 이진 필드 또는
로 구분된 텍스트 필드 이륜 전차. *가 주어지면 여러 개의 순차 구분 기호가
하나로 간주됩니다. 기본 구분 기호는 쉼표입니다.

인용 된 [이륜 전차]
필드는 다음과 같이 인용될 수 있습니다. 이륜 전차, 기본 인용 부호는 큰따옴표입니다.
'"'. 따옴표는 \로 이스케이프된 것으로 간주됩니다.이륜 전차 또는 다음과 같이 표시를 두 배로
입력에. 이스케이프되지 않은 따옴표는 출력에서 ​​유지되지 않습니다.

머리글 먼저|모든|아니
헤더 행의 발생을 제어합니다. 기본값은 아니오입니다. 처음 또는 모두로 설정하면
첫 번째 입력 파일의 첫 번째 줄은 다음을 포함하는 헤더 줄로 간주됩니다.
필드의 이름. First는 첫 번째 파일에만 헤더가 있음을 의미합니다.
모든 파일에는 헤더가 있지만 이름은 여전히 ​​의 헤더에서 가져옵니다.
첫 번째 파일. 헤더 라인은 레코드 정의에 따라 처리됩니다.
이름 위치, 구분 기호 등은 필드와 동일합니다.

출력 name
이 구조에 속하는 모든 레코드는 출력 형식에 따라 인쇄됩니다. name.
기본값은 'default'라는 이름의 출력을 사용하는 것입니다.

기록 name {옵션...}
구조에 대해 하나의 레코드를 정의합니다. 구조에는 여러 레코드 유형이 포함될 수 있습니다.

기록 옵션 :
id 위치

제거 위치 정규 표현식
입력 파일의 레코드를 식별합니다. 기록은 다음으로 식별됩니다. 또는으로
정규 표현식 정규 표현식 입력 레코드 위치에서 위치. 고정용
길이 및 이진 입력 위치 는 입력 레코드의 바이트 위치이고
분리 입력의 경우 위치 의미 위치'입력 레코드의 필드.
위치는 하나에서 시작됩니다.

Id'는 입력 구조에 동일한 레코드 유형이 여러 개 포함된 경우에만 필요합니다.
길이 또는 필드 수. 인쇄할 수 없는 문자는 다음과 같이 이스케이프될 수 있습니다. \xnn 어디에 nn
문자의 XNUMX진수 값입니다.

레코드 정의에는 여러 항목이 포함될 수 있습니다. id~ 그럼 모두 id'd는 입력과 일치해야 합니다.
선 (id's는 논리 및)와 결합됩니다.

다중 레코드 이진 구조에서 모든 레코드에는 최소한 하나의 레코드가 있어야 합니다. id.

name|필러|* [길이]|* [조회]|* [출력]
텍스트 입력 구조에서 하나의 필드를 지정합니다. 길이 고정 길이의 경우 필수입니다.
마지막 필드를 제외한 입력 구조. 고정 길이의 마지막 필드인 경우
입력 구조는 * 대신에 길이 그런 다음 마지막 필드는 임의의 값을 가질 수 있습니다.
길이.

길이는 고정 길이 형식으로 필드를 인쇄하는 데에도 사용됩니다. %D or %D
지령. 구성 파일에 있는 필드의 순서는 필수적입니다.
레코드의 필드 순서.

이름 대신 '*'가 주어지면 '이름'은
필드 또는 'header' 옵션에 'first' 또는 'all' 값이 있는 경우
필드는 헤더 라인(입력의 첫 번째 라인)에서 가져옵니다.

If 조회 가 주어지면 필드 내용이 조회에서 조회를 수행하는 데 사용됩니다.
테이블 조회. 길이가 필요하지 않지만(분리된 형식) 조회가 필요한 경우 다음을 사용하십시오.
길이 정의 대신 별표(*)를 사용합니다.

If 출력 주어진 필드는 출력을 사용하여 인쇄됩니다. 출력. 대신 별표 사용
조회가 필요하지 않은 경우 조회.

필드 이름을 FILLER로 지정하면 필드가 출력에 인쇄되지 않습니다.

name|필러|* [길이]|유형 [조회]|* [출력]
이진 입력 구조에서 하나의 필드를 지정합니다. 다른 모든 기능은 다음과 동일합니다.
를 제외한 텍스트 구조 유형 매개 변수입니다. 유형 필드 데이터 유형을 지정하고
길이이며 다음 값을 가질 수 있습니다.

이륜 전차 인쇄 가능한 문자입니다.

짧은 현재 시스템 길이와 바이트 순서가 있는 짧은 정수입니다.

INT 현재 시스템 길이와 바이트 순서가 있는 정수입니다.

현재 시스템 길이와 바이트 순서가 있는 긴 정수입니다.

현재 시스템 길이와 바이트 순서가 있는 Long long 정수입니다.

짧은 현재 시스템 길이와 바이트 순서가 있는 부호 없는 짧은 정수입니다.

단위 현재 시스템 길이와 바이트 순서가 있는 부호 없는 정수입니다.

울롱 현재 시스템 길이와 바이트 순서가 있는 부호 없는 긴 정수입니다.

울롱 현재 시스템 길이와 바이트 순서가 있는 부호 없는 long long 정수입니다.

int8 8비트 정수.

int16_be 빅 엔디안 16비트 정수.

int32_be 빅 엔디안 32비트 정수.

int64_be 빅 엔디안 64비트 정수.

int16_le 리틀 엔디안 16비트 정수.

int32_le 리틀 엔디안 32비트 정수.

int64_le 리틀 엔디안 64비트 정수.

uint8 부호 없는 8비트 정수.

uint16_be 부호 없는 빅 엔디안 16비트 정수.

uint32_be 부호 없는 빅 엔디안 32비트 정수.

uint64_be 부호 없는 빅 엔디안 64비트 정수.

uint16_le 부호 없는 리틀 엔디안 16비트 정수.

uint32_le 부호 없는 리틀 엔디안 32비트 정수.

uint64_le 부호 없는 리틀 엔디안 64비트 정수.

뜨다 현재 시스템 길이와 바이트 순서가 있는 부동 소수점.

float_be 현재 시스템 길이와 빅 엔디안 바이트 순서를 갖는 부동 소수점.

float_le 현재 시스템 길이와 리틀 엔디안 바이트 순서를 갖는 부동 소수점.

더블 현재 시스템 길이와 바이트 순서가 있는 Double입니다.

더블비 현재 시스템 길이와 빅 엔디안 바이트 순서를 갖는 Double입니다.

더블레 현재 시스템 길이와 리틀 엔디안 바이트 순서를 갖는 Double입니다.

bcd_be_ 길이가 있는 Bcd 수 빅 엔디안 순서의 니블.

bcd_le_ 길이가 있는 Bcd 수 그리고 리틀 엔디안 순서의 니블.

hex_be_ 길이가 있는 빅 엔디안 순서의 XNUMX진수 데이터 .

hex_le_ 길이가 있는 리틀 엔디안 순서의 XNUMX진수 데이터 .

If 길이 대신에 주어진다. 유형, 필드는 인쇄 가능한 것으로 간주됩니다.
길이가 있는 문자열 길이. 문자열은 다음까지 인쇄됩니다. 길이 문자가 인쇄됩니다
또는 NULL 문자가 발견되었습니다.

BCD 번호(bcd_be_bcd_le_)까지 인쇄됩니다. 바이트를 읽거나
XNUMX진수 값을 갖는 니블 f 발견된다. 빅 엔디안 차수가 있는 Bcd 번호는 다음과 같습니다.
순서대로 인쇄됨: 최상위 니블 첫 번째 및 최하위 니블 두 번째
엔디안 순서가 적은 bcd 번호는 최하위 순서로 인쇄됩니다.
첫 번째 니블과 가장 중요한 니블 두 번째. 바이트는 항상 크게 읽습니다.
엔디안 순서.

XNUMX진수 데이터(hex_be_hex_le_)는 XNUMX진수 값으로 인쇄됩니다. 큰
엔디안 데이터는 하위 주소부터 시작하여 리틀 엔디안 데이터를 인쇄합니다.
상위 주소에서 시작합니다.

필드 카운트 번호
가지고 있는 것과 같은 효과 * 번호 타임스. 길이가 지정되지 않았기 때문에 이것은
분리된 구조에서만 작동합니다.

필드에서 기록
이 레코드의 필드는 레코드의 필드와 동일합니다. 기록.

출력 name
이 레코드는 출력 형식에 따라 인쇄됩니다. name. 기본값은 출력을 사용하는 것입니다.
구조에 지정된 형식.

수평 번호 [요소_이름|*] [그룹 이름]
파일의 내용을 계층적으로 인쇄해야 하는 경우 레벨을 사용할 수 있습니다.
다단계 중첩 양식 문서. 요소 이름이 아닌 경우 *를 사용하십시오.
필요. number는 XNUMX번(가장 높은
수평), 요소_이름 레코드의 이름이고, 그룹 이름 그룹화하는 데 사용됩니다
같은 수준과 낮은 수준의 기록. 오직 번호 필수 매개변수입니다.

레코드 길이 엄격한|최저한의

엄격한 입력 레코드 길이 및 필드 수는 의 레코드 정의와 일치해야 합니다.
처리하도록 합니다. 이것은 기본값입니다.

최저한의 입력 레코드 길이 및 필드 수는 정의된 것과 같거나 더 길 수 있습니다.
기록을 위해. 나머지 입력 라인은 무시됩니다.

산출 정의
구성 파일에는 여러 출력 정의가 있을 수 있습니다. 형식을 선택할 수 있습니다
'-p' 옵션으로. 기본 형식은 'default'로 명명됩니다.

출력 name|디폴트 값 {옵션...}
하나의 출력 형식을 정의합니다. 아무 것도 주어지지 않으면 'default'로 명명된 출력이 사용됩니다.
구조 또는 레코드의 경우 또는 옵션 '-p'와 함께 제공되지 않습니다.

미리 정의된 두 가지 출력 형식이 있습니다. 아니살갗이 벗어 진. 아니 모든 인쇄를 억제하고
살갗이 벗어 진 원래 입력 데이터를 인쇄합니다.

산출 옵션
출력 정의의 그림에는 printf 스타일 % 지시문이 포함될 수 있습니다.

%f 입력 파일의 이름입니다.

%s 현재 구조의 이름입니다.

%r 현재 레코드의 이름입니다.

%o 현재 파일의 레코드 번호를 입력합니다.

%O 첫 번째 파일부터 레코드 번호를 입력합니다.

%i 현재 파일에 있는 현재 레코드의 바이트 오프셋입니다. XNUMX부터 시작합니다.

%I 첫 번째 파일에서 시작하는 현재 레코드의 바이트 오프셋입니다. XNUMX부터 시작합니다.

%n 분야 명.

%t 선행 및 후행 공백이 없는 필드 내용.

%d 필드 내용입니다. 이진 정수는 십진수 값으로 인쇄됩니다. 부동 소수점 수
스타일로 인쇄됩니다 [-]ddd.ddd, 여기서 다음 자릿수
소수점 문자는 6입니다. Bcd 숫자는 십진수로 인쇄되고
XNUMX진수 데이터를 연속 XNUMX진수 값으로.

%D 필드 내용, 필드 길이에 맞게 오른쪽 패딩됨(길이 정의 필요
필드).

%C 필드 내용, 필드 길이에 맞게 오른쪽 패딩됨(길이 정의 필요
필드). 입력 필드가 필드 길이보다 길면 출력 필드가 잘립니다.

%x 이진 정수의 부호 없는 XNUMX진수 값입니다. 다른 필드는 다음을 사용하여 인쇄됩니다.
지령 %d.

%l 조회의 값입니다.

%L 조회의 값, 필드 길이로 오른쪽 패딩됨(에 대한 길이 정의 필요
필드).

%e 아무 것도 인쇄하지 않고 여전히 "필드가 비어 있음" 검사를 수행합니다. 할 수있다
비어 있지 않은 필드의 이름만 인쇄해야 할 때 사용됩니다.

%p 필드는 레코드의 시작 위치입니다. 고정 구조의 경우 필드의 바이트입니다.
입력 라인의 위치 및 분리된 구조의 경우 이것은 서수입니다.
필드의. 하나부터 시작합니다.

%h 필드의 XNUMX진수 덤프입니다. 바이트 값은 연속으로 인쇄됩니다. xnn 값,
어디 nn 바이트의 XNUMX진수 값입니다. 데이터는 엔디안보다 먼저 인쇄됩니다.
변환.

%g 키워드로 부여된 그룹 이름 그룹 이름 레코드 정의에서.

%m 키워드로 주어진 요소 이름 요소_이름 레코드 정의에서.

%% 백분율 기호입니다.

파일 헤더 .
파일 내용보다 먼저 그림이 한 번 인쇄됩니다.

파일_트레일러 .
그림은 파일 내용 이후에 한 번 인쇄됩니다.

머리글 .
지정된 경우 필드 이름을 설명하는 헤더 행이 앞에 인쇄됩니다.
기록. 모든 필드 이름은 . 같은 것을 사용하여
필드에 대해 정의된 구분 기호 및 필드 길이. 그림 만 포함할 수 있습니다 %n
지침.

데이터 .
필드 내용은 다음과 같이 인쇄됩니다. ..

조회 .
필드가 룩업 테이블에 매핑되면 그림 대신 이 그림이 사용됩니다.
데이터 옵션. 제공되지 않은 경우 다음 사진에서 데이터 사용하게 될 것이다.

분리 기호
모든 필드는 다음으로 종료됩니다. , 레코드의 마지막 필드를 제외하고. 기본
구분자를 인쇄하지 않습니다.

레코드 헤더 .
. 기록 내용 앞에 인쇄됩니다. 기본값은 헤더를 인쇄하지 않는 것입니다.

기록_트레일러 .
. 기록 내용 뒤에 인쇄됩니다. 기본값은 개행입니다.

정당화 왼쪽 (left)|연락해주세요|이륜 전차
필드는 왼쪽 또는 오른쪽으로 정렬됩니다. 이륜 전차 첫 번째에 따라 출력을 정당화합니다.
발생 이륜 전차 데이터 그림에서. 기본값은 왼쪽입니다.

톱니 모양
기록 내용은 . 필드 내용은 XNUMX배
. 기본값은 들여쓰기를 하지 않는 것입니다.

필드 목록 name1,name2, ...
다음으로 명명된 필드 또는 상수만 name1,name2,...가 인쇄되며, 다음과 같은 효과가 있습니다.
'-f' 옵션. 기본값은 모든 필드를 인쇄하는 것입니다. 필드도 인쇄됩니다.
나열된 것과 동일한 순서입니다.

데이터 인쇄 없음 |아니
아니오로 설정하고 필드 목록 의 인쇄를 억제합니다. 레코드 헤더
기록_트레일러 현재 레코드에 지정된 필드가 없는 경우
in 필드 목록.

필드 빈 인쇄 |아니
no로 설정하면 완전히 문자로 구성된 필드에 대해 아무 것도 인쇄되지 않습니다.
빈 문자. 레코드의 필드가 인쇄되지 않으면 인쇄
of 기록_트레일러 도 억제됩니다. 기본값은 예입니다.

빈 문자
"빈" 필드를 정의하는 문자 집합을 지정합니다. 기본값은 "
\f\n\r\t\v"(공백, 폼 피드, 줄 바꿈, 캐리지 리턴, 가로 탭 및
세로 탭).

결과물 파일 파일
출력은 다음과 같이 작성됩니다. 파일 기본 출력 대신. - 표준이 주어진다면
출력이 사용됩니다.

그룹_헤더
레코드에 수준 및 그룹 이름이 정의되어 있는 경우 첫 번째 전에 인쇄됩니다
같은 그룹에 기록하거나 같은 수준에서 그룹 이름이 변경된 경우

그룹 트레일러
레코드에 수준 및 그룹 이름이 정의되어 있는 경우 기록 후에 인쇄됩니다.
낮은 수준에서 또는 그룹 이름이 같은 수준에서 변경된 경우 또는 높은 수준에서
레벨 기록을 찾았습니다.

요소_헤더
레코드에 레벨과 헤더 이름이 정의되어 있는 경우 기록 전에 인쇄됩니다
내용

요소_헤더
레코드에 레벨과 헤더 이름이 정의되어 있는 경우 기록 후에 인쇄됩니다.
내용

육각형 |아니
XNUMX진수를 대문자로 인쇄합니다. 기본값은 아니오입니다.

조회 정의
조회 name {옵션...}
하나의 조회 테이블을 정의합니다.

조회 옵션 :
수색 정확한|가장 긴
룩업 테이블의 검색 유형입니다.

기본값 가치
가치 조회에 성공하지 못한 경우 인쇄됩니다.

가치
조회 테이블에 대한 하나의 키/값 쌍입니다.

파일 name [분리 기호]
파일에서 키/값 쌍을 읽습니다. name. 모든 줄은 키/값으로 간주됩니다.
에 의해 분리된 쌍 분리 기호. 기본 구분 기호는 세미콜론입니다.

상수
옵션을 사용하여 입력 필드 상수 값에 추가로 인쇄할 수 있습니다. -f,--필드 목록 or
출력 옵션 필드 목록. 상수는 다음을 사용하여 인쇄됩니다. 데이터 출력 옵션.

상수는 다음과 같이 지정됩니다.

const를 name 가치
name 필드 목록에 나타납니다. 가치 모든 레코드에 대해 다음과 같이 인쇄됩니다.
전에, name 입력 필드 중 하나였습니다.

입력 전 처리기
에 대한 입력 전처리기를 정의할 수 있습니다. fffe. 입력 전처리기는 단순히
입력 파일의 내용을 표준 출력에 기록하는 실행 프로그램
에 의해 읽힐 것입니다 fffe. 입력 전처리기가 해당 문자에 아무 문자도 쓰지 않는 경우
표준 출력, 다음 fffe 원본 파일을 사용합니다.

입력 전처리기를 설정하려면 페오펜 명령줄에 대한 환경 변수
입력 전처리기를 호출합니다. 이 명령줄에는 하나의 항목이 포함되어야 합니다.
문자열의 %s, 입력 전처리기가 입력 파일 이름으로 대체됩니다.
명령이 호출됩니다.

입력 전처리기는 다음과 같은 경우 사용되지 않습니다. fffe 표준 입력을 읽고 있습니다.

사용 예


'FirstName', 'LastName' 및 'Age' 필드가 포함된 고정 길이 플랫 파일의 예:

존 리퍼 23
스콧 타이거 45
메리 무어 41

이 파일은 다음 구성으로 XML로 인쇄할 수 있습니다.

구조 인력 {
유형 고정
출력 XML
기록 사람 {
필드 이름 9
필드 성 13
필드 나이 2
}
}

출력 XML {
파일 헤더 " \N"
데이터 "<%n>%d \N"
record_header "<%r>\n"
기록_트레일러 " \N"
들여쓰기 " "
}

onworks.net 서비스를 사용하여 온라인으로 ffe 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

Linux 명령

Ad