2016-03-24 3 views
0

Я ищу способ, чтобы разделить очень длинную строку, используя этот разделитель: '| 'разбить строку, используя разделитель слов САЦ

Функция сканирования, кажется, не принимает слово разделителя, так что если я

scan(string,3,'| ') 

он разделится на каждом | и пространстве
, а не на каждом '| ', как мне нужно.

В документации я не вижу модификатора, допускающего это. http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000214639.htm

+0

Я только что получил идея: использовать transwrd заменить '| 'by' _', а затем использовать проверку –

+0

Удалите пространство из разделителя в функции сканирования, и оно должно работать нормально. Если вы получаете дополнительную полосу для использования пространства или обрезку для удаления ведущих пространств. – Reeza

ответ

0

Я нашел его сам

использовать tranwrd заменить '| ' на '_'

newstring=tranwrd(string,'| ','_'); 

, а затем я могу использовать функцию сканирования обычно

xxx=scan(newstringstring,3,'_'); 
+1

Возможно, вы захотите рассмотреть несколько более неясную заменяющую строку. 'FF'X –

+0

хорошая идея, я узнал, _ уже был в строке, и я переключился на%, но попробую вашу идею –

1

INFILE имеет DLMSTR в сочетании с магией вторжения может делать именно то, что вам нужно. Ваша трансвердная идея должна работать хорошо.

enter image description here

data test; 
    input string $50.; 
    cards4; 
This|is | pipe space| delmimited 
This| is| too I believe 
;;;; 
    run; 
data test2; 
    infile cards missover dlmstr='| '; 
    if _n_ eq 1 then input @; 
    array w[5] $64; 
    do while(not eof); 
     set test end=eof; 
     _infile_ = string; 
     input @1 w[*] @; 
     output; 
     end; 
    stop; 
    cards; 
Necessary evil 
    run; 
Смежные вопросы