Desktop productivity for business analysts and programmers

Tricky file to read in

Accepted Solution Solved
Reply
Super Contributor
Super Contributor
Posts: 404
Accepted Solution

Tricky file to read in

have space separated file like below. problem is when var 3 has 0 value file don't have extra space mentioned and next field continues.

 

var1/var2/var3/4/var5

 

1  "host1"  2  "file1"  "file2"   123456

4  "host1"  "host2"   "host3"   "host4"  3  "file1"  "file2"  "file3"  456789

2  "host1"  "host2"   0  9922

 

want

var1      var2                                                        var3              var4                                var5

1           "host1"                                                     2                   "file1"  "file2"                   123456

4           "host1"  "host2"   "host3"   "host4"           3                   "file1"  "file2"  "file3"        456789       

2           "host1"  "host2"                                        0                   _null_                              9922

 

 

 

 

 


Accepted Solutions
Solution
‎02-16-2018 03:47 PM
Super User
Super User
Posts: 7,860

Re: Tricky file to read in

Looks pretty simple to me.

data want ;
  length var1 8 var2 $200 var3 8 var4 $200 var5 8;
  length i 8 next $200;
  input var1 @;
  do i=1 to var1 ;
    input next @;
    var2 = catx(' ',var2,next);
  end;
  input var3 @;
  do i=1 to var3 ;
    input next @;
    var4 = catx(' ',var4,next);
  end;
  input var5  ;
  drop i next ;
cards;
1  "host1"  2  "file1"  "file2"   123456
4  "host1"  "host2"   "host3"   "host4"  3  "file1"  "file2"  "file3"  456789
2  "host1"  "host2"   0  9922
;

View solution in original post


All Replies
Super User
Posts: 6,543

Re: Tricky file to read in

Assuming that you already have a way to read in VAR1 through VAR5 for the non-zero rows, here is the change to make:

 

input var1 var2 var3 @ ;

if var3 = 0 then input var5;

else input var4 var5;

 

This is obviously missing a lot of the details of the INPUT statement.  But it's the trialing @ that you will need to add, to be able to modify your existing program.

Solution
‎02-16-2018 03:47 PM
Super User
Super User
Posts: 7,860

Re: Tricky file to read in

Looks pretty simple to me.

data want ;
  length var1 8 var2 $200 var3 8 var4 $200 var5 8;
  length i 8 next $200;
  input var1 @;
  do i=1 to var1 ;
    input next @;
    var2 = catx(' ',var2,next);
  end;
  input var3 @;
  do i=1 to var3 ;
    input next @;
    var4 = catx(' ',var4,next);
  end;
  input var5  ;
  drop i next ;
cards;
1  "host1"  2  "file1"  "file2"   123456
4  "host1"  "host2"   "host3"   "host4"  3  "file1"  "file2"  "file3"  456789
2  "host1"  "host2"   0  9922
;
Super Contributor
Super Contributor
Posts: 404

Re: Tricky file to read in

[ Edited ]

Thanks Tom. I ran your code and it looks great.

 

 

 

☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 3 replies
  • 290 views
  • 5 likes
  • 3 in conversation