infile dlm='@@', но усеченный адрес электронной почты

Я пытаюсь использовать:

infile dlm='@@' dsd missover; 

чтобы скопировать код SAS в новое место, но это усеченный адрес электронной почты (в коде SAS есть адрес электронной почты, например, abc@xyz.com), и только имя пользователя ABC отображается в новом коде, а Часть @xyz.com была обрезана.

Поэтому я исключил опцию infile

dlm='@@' 

повторно запустите код, и адрес электронной почты был прочитан правильно, однако некоторые регулярные строки отсутствуют.

Просто задайтесь вопросом, могу ли я попытаться прочитать все строки правильно, а также правильно прочитать адрес электронной почты с помощью некоторых параметров infile.

Спасибо!

пример:

*91,87,95 abc@xyz.com test hudpiwaHUOV0 
 97,,92% bmno[aej0i34hmbtgkoersw934bnrtui9sdobn vnbud9rw0aq598vnfjipa 
 njuio9rpep0snhtui9es000 
 from="mjerrt_thpian@wedoo.com" 
 fjsui123,1,1 0 ;

 data a;
 infile "/.../email.xlsx" 
   missover dsd lrecl=32767 firstobs=1;* dlm='@';     * delimiter = '@@';
   informat all $char50. ;
  input all $ ;
  pk=_n_;
 run;

2 ответа

Решение

Похоже, в ваших данных в качестве разделителя используется пробел.

Давайте преобразуем текст из вашего примера в файл, чтобы у нас было что проверить.

filename txt temp;
options parmcards=txt;
parmcards4;
*91,87,95 abc@xyz.com test hudpiwaHUOV0 
 97,,92% bmno[aej0i34hmbtgkoersw934bnrtui9sdobn vnbud9rw0aq598vnfjipa 
 njuio9rpep0snhtui9es000 
 from="mjerrt_thpian@wedoo.com" 
 fjsui123,1,1 0 ;
;;;;

Теперь мы можем читать файл и разбирать его на отдельные "слова".

data parse ;
  infile txt dlm=' ' length=llen column=ccol ;
  lineno+1;
  do wordno=1 by 1 until(ccol>llen);
    length word $200 ;
    input word @ ;
    output;
  end;
run;

Полученные результаты:

Obs    lineno    wordno    word

  1       1         1      *91,87,95
  2       1         2      abc@xyz.com
  3       1         3      test
  4       1         4      hudpiwaHUOV0
  5       2         1      97,,92%
  6       2         2      bmno[aej0i34hmbtgkoersw934bnrtui9sdobn
  7       2         3      vnbud9rw0aq598vnfjipa
  8       3         1      njuio9rpep0snhtui9es000
  9       4         1      from="mjerrt_thpian@wedoo.com"
 10       5         1      fjsui123,1,1
 11       5         2      0
 12       5         3      ;

Если вы добавите опцию DSD к оператору INFILE, вы получите больше слов, поскольку соседние (или ведущие) пробелы будут указывать на пустое слово.

Использовать

infile 'email.xlsx' dlm='00'x;

если вам действительно не нужен разделитель.

Другие вопросы по тегам