【问题标题】:JSON-file without line breaks, cant import file to SAS没有换行符的 JSON 文件,无法将文件导入 SAS
【发布时间】:2016-01-26 17:50:36
【问题描述】:

我有一个大型 json 文件 (250 Mb),在记事本或 SAS 中打开文件时,其中没有换行符。但是如果我在写字板中打开它,我会得到正确的换行符。我想这可能意味着 json 文件使用了 unix 换行符,notapad 无法读取,但 wordpad 可以从我读过的内容中读取。

我需要将文件导入 SAS。这样做的一种方法是在写字板中打开文件,将其保存为文本文件,希望保留正确的换行符,以便我可以在 SAS 中读取文件。我已经尝试读取文件,但是没有换行,我只能得到第一个观察结果,我无法让程序找到下一个观察结果。

我尝试让写字板保存文件,但写字板每次都崩溃,可能是因为文件大小。还尝试通过 powershell 执行此操作,但无法弄清楚打开文件后如何保存文件,而且当我通过指向并单击尝试它时,我看不出它应该工作的原因,因为它会崩溃。

还有其他方法可以修复这个 json 文件吗?有没有办法查看换行符的unix代码并将其替换为windows换行符或类似的东西?

编辑: 我尝试在文件名和 infile 中添加 TERMSTR=LF 选项,但没有任何运气:

filename test "C:\path";
data datatest;
  infile test lrecl = 32000 truncover scanover TERMSTR=LF;
  input @'"Id":' ID $9.;
run;

但是,如果我手动编辑文件的一小部分以设置换行符,它就可以工作。 TERMSTR 选项似乎对我没有多大作用

编辑 2: 使用RECFM=F解决了

data datatest;
  infile test lrecl = 42000 truncover scanover  RECFM=F ;
  input @'"Id":' ID $9.;
run; 

编辑 3: 结果它终究没有解决问题。 RECFM=F 表示所有记录都有固定长度,但它们没有,所以我的数据混淆了很多信息都被跳过了。试过RECFM=V(ariable),但这也不起作用。

【问题讨论】:

  • 查看 FILENAME 语句的文档,特别是 TERMSTR=LF。
  • 您可以发布您的解决方案作为问题的答案,如果您对它感到满意,请接受它。
  • 原来我还是没有解决问题,se edit 3
  • JSON 文件不需要有任何换行符。为什么不尝试使用 RECFM=N 读取它?
  • 我尝试使用 RECFM=N,但收到以下警告:'@"STRING"' INPUT/PUT 语句选项与二进制模式 I/O 不一致。正在终止 DATA STEP 的执行。

标签: json powershell sas wordpad


【解决方案1】:

我猜你用的是windows,所以试试:

TYPE input_filename | MORE /P > output_filename

这应该用 windows/dos 替换 unix 样式的文本文件。

【讨论】:

  • 这是评论,不是答案。
  • 我在我的程序哪里写这个?在文件名语句或数据步骤中?
【解决方案2】:

250 MB 不会太长,不能视为一条记录。

data want ;
  infile json lrecl=250000000; *250 Mb ;
  input @'"Id":' ID :$9. @@;
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 2014-02-21
    • 1970-01-01
    • 2014-10-04
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多