我正在尝试将我读过的文本文件名转换为SAS 9.0版中的合法数据集名称。
我使用的代码是这样的(其中fnames是包含文本文件名的数据集):
data fnames;
set fnames;
filename2 = scan(filename, 1, '.');
filename3 = tranwrd(filename2, "_", "-");
filename4 = strip(filename3);
filename5 = tranwrd(filename4, " ", "-");
/*filename4 = compress(filename3);*/
filename4 = cats('_', filename4);
drop filename2 filename3;
run;
我希望这用文本名称替换文件名中的任何空格,而不是文件名末尾的尾随空格(字段长度和格式都是200美元。但字符串长度本身是可变的。我的输入看起来像这样:
1080528-19-08-2016-Man Utd-v-Southampton.txt
...我的输出如下:
1080528-19-08-2016-Man-Utd-v-Southampton----------------------------------------------------------------------------------------------------------------------------------------------------------------
......当它看起来像这样:
1080528-19-08-2016-Man-Utd-v-Southampton
有人可以告诉我需要改变什么吗?
由于
答案 0 :(得分:2)
所有SAS字符变量在其长度的末尾都包含空格。这是不可避免的 - 因此每次翻译空间时都需要始终使用TRIM。你不能像你那样零碎地工作 - strip
并没有真正做得多(如果它还没有,它会左对齐,但是那个'因为它没有摆脱那些空间。 SAS中没有varchar
概念。
所以,这个:
filename5 = tranwrd(filename4, " ", "-");
需要:
filename5 = tranwrd(trim(filename4), " ", "-");
至少。
我会注意到,当_
合法地成为SAS数据集名称并且-
不属于_
时,您将-
转换为filename_fin = cats('_',translate(scan(filename,1,'.'),'__',' -'));
的原因令人困惑通常。
也许:
data _null_;
length filename $200;
filename= '1080528-19-08-2016-Man Utd-v-Southampton.txt';
filename_fin = cats('_',translate(scan(filename,1,'.'),'__',' -'));
put +4 filename= / filename_fin=;
run;
所以:
memname
我会注意到这仍然可能不是有效import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
print key
,因为它超过32个字符。