SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

求助:如何读入这种格式的文本文件,谢谢

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2009-7-22 16:32:32 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

chr=tranwrd(chr,',,',',.,');
chr=tranwrd(chr,',,',',.,');

之所以写2行,是为了处理连续奇数个','的情况吧!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2009-7-22 18:05:58 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> 我瞎写的,9999999只是想保证logicl record length的值比TXT文件的长度大,没别的意思
不知道实际应用中记录行的最大长度是什么,其实如果没有超过infile语句中linesize选项的最大值的话,直接input是完全可以的,lrecl选项好象不是必须的;
[code:1ftrnjhe]data aaa;
        infile &quot;d&#58;\aaa&#46;txt&quot; dlm=',;' dsd linesize=32767;
        input var1 $ var2-var11 @@;         
run;[/code:1ftrnjhe]
但如果长度超过32767的话,上面的方法就会报错
[code:1ftrnjhe]NOTE&#58; LOST CARD&#46;
NOTE&#58; 从 Infile &quot;d&#58;\aaa&#46;txt&quot; 中读取了 1 条记录。
      最小记录长度是 32767。
      最大记录长度是 32767。
       一行或多行被截断。[/code:1ftrnjhe]
tranwrd()函数是没法子的法子,我没想到scan()函数会把连续的2个分隔符当一个看,又没想到别的好方法
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2009-7-22 18:14:22 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

to hopewell
呵呵 我想的办法也是这样,其实可以把每个&quot;,&quot;号前加个空格
chr=tranwrd(chr,&quot;,&quot;,&quot; ,&quot;);

也是没有法子的法子...
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
14#
 楼主| 发表于 2009-7-22 18:48:05 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
15#
 楼主| 发表于 2009-7-23 12:39:12 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

to vicky1020

倒数第二个variable不总是空,比如有的记录是“D”,其实是个字符型变量,谢谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
16#
 楼主| 发表于 2009-7-23 12:42:17 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

to hopewell

我的记录应该超过了linesize选项的最大值,因为我用lrecl=1048576 大概只读了1/4的数据
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
17#
 楼主| 发表于 2009-7-23 16:30:38 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

TO: stonetj
要读入的是什么数据呀,这么大?
如果是从数据库转出的,还是直接读数据库吧,又方便还不容易出错.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
18#
 楼主| 发表于 2009-7-24 00:27:57 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

原则上可以用fopen(fileref, 'i', 1, 'b')来设定一次读一个字符进栈,碰到逗号或者分号把栈内所有字符存入相应变量,碰到分号OUTPUT。
也可能就是不成,我瞎JB说的。[url:1acfdy5t]http&#58;//support&#46;sas&#46;com/kb/19/345&#46;html[/url:1acfdy5t]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
19#
 楼主| 发表于 2009-7-24 13:06:07 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

to hopewell
最终还是通过数据库解决的,谢谢各位!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 21:35 , Processed in 0.068966 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表