Jeff
Jeff

Reputation: 29

infile dlm='@@', but truncated email address

I am trying to use:

infile dlm='@@' dsd missover; 

to copy a SAS code to a new location, but it truncated email address (there is an email address e.g. [email protected] in the SAS code), and only the username 'ABC' show up in the new code, and the '@xyz.com' part was truncated.

So i excluded the infile option

dlm='@@' 

re-run the code, and the email address was read correctly, however some regular lines are missing.

Just wonder if some infile options I can try to read all the lines correctly, also read the email address correctly too.

thanks!

an example:

*91,87,95 [email protected] test hudpiwaHUOV0 
 97,,92% bmno[aej0i34hmbtgkoersw934bnrtui9sdobn vnbud9rw0aq598vnfjipa 
 njuio9rpep0snhtui9es000 
 from="[email protected]" 
 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;

Upvotes: 0

Views: 111

Answers (2)

Lee
Lee

Reputation: 1427

Use

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

if you really need no delimiter.

Upvotes: 0

Tom
Tom

Reputation: 51611

Looks like your data is using space as the delimiter.

Let's convert your example text into a file so we have something to test against.

filename txt temp;
options parmcards=txt;
parmcards4;
*91,87,95 [email protected] test hudpiwaHUOV0 
 97,,92% bmno[aej0i34hmbtgkoersw934bnrtui9sdobn vnbud9rw0aq598vnfjipa 
 njuio9rpep0snhtui9es000 
 from="[email protected]" 
 fjsui123,1,1 0 ;
;;;;

Now we can read the file and parse it into the individual "words".

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;

Results:

Obs    lineno    wordno    word

  1       1         1      *91,87,95
  2       1         2      [email protected]
  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="[email protected]"
 10       5         1      fjsui123,1,1
 11       5         2      0
 12       5         3      ;

If you add the DSD option to the INFILE statement you will get more words since adjacent (or leading) spaces will indicate an empty word.

Upvotes: 0

Related Questions