Read Access Violation在proc LUA打开文件时出现

我用SAS编程并希望使用LUA来编写XML文件

所以首先,我启动'proc LUA'并传递文件名 ;

%let file = \\ourCompany\ourTeam\ourProject\myFile.xml;

proc lua restart;
submit;
    local file_name = sas.symget("file")
    print (file_name)

--接下来,我打开文件进行写入,写入一些内容然后关闭文件

    print('DEBUG: before opening')
    file = io.open (file_name, "w")
    print('DEBUG: after opening, before writing')
    file:write ("<test/>", "\n")
    print('DEBUG: after writing, before closing')
    file:close()
    print('DEBUG: after closing')

-- 当然还要停止LUA

endsubmit;
run;

/*这很有效:文件以这个内容创建

<test/>

但是日志显示以下消息

``` 注意:Lua初始化。 \our Company\ourTeam\ourProject\myFile.xml DEBUG:打开之前 DEBUG:打开后,在写入之前 DEBUG:写入后,在关闭之前

错误:遇到异常。 请联系技术支持并向他们提供以下追溯信息:

SAS任务名称为[LUA(2)] 错误:读取访问冲突LUA(2) 异常发生于(89400CB7) 任务回溯 地址帧(DBGHELP API Version 4.0 rev 5) 00007FFD89400CB7 000000000862F1F0 ntdll:RtlAllocateHeap+0x27 00000000084D2ACD 000000000862F1F8 sasplua:tkvercn1+0x81A8D 00000000084D0E7F 000000000862F250 sasplua:tkvercn1+0x7FE3F 00000000084D0D17 000000000862F280 sasplua:tkvercn1+0x7FCD7 00000000084CF711 000000000862F2B0 sasplua:tkvercn1+0x7E6D1 0000000008462609 000000000862F300 sasplua:tkvercn1+0x115C9 0000000008474A7D 000000000862F410 sasplua:tkvercn1+0x23A3D 0000000008485C7E 000000000862F530 sasplua:tkvercn1+0x34C3E 0000000008474349 000000000862F570 sasplua:tkvercn1+0x23309 00000000084788A4 000000000862F8D0 sasplua:tkvercn1+0x27864 0000000008478A9D 000000000862F940 sasplua:tkvercn1+0x27A5D 0000000008469746 000000000862F9A0 sasplua:tkvercn1+0x18706 00000000084523A2 000000000862F9F0 sasplua:tkvercn1+0x1362 000000000845224E 000000000862FB10 sasplua:tkvercn1+0x120E 00000000084529F4 000000000862FBF0 sasplua:tkvercn1+0x19B4 0000000001A489DB 000000000862FBF8 sashost:Main+0x10EBB 0000000001A4E61D 000000000862FF50 sashost:Main+0x16AFD 00007FFD875613F2 000000000862FF58 KERNEL32:BaseThreadInitThunk+0x22 00007FFD893E54F4 000000000862FFD0 ntdll:RtlUserThreadStart+0x34\n 注意:由于错误,SAS系统停止处理此步骤。\n\n```

我不知道这是一个纯LUA问题,还是与SAS中的'proc LUA'有关。由于最后一条DEBUG消息未打印,因此该问题似乎在关闭文件时发生。 我尝试了几个不同的'open'命令选项,并尝试了移除'io.write',但是这并没有帮助。

点赞
用户66696
用户66696

你的代码对我来说很好(在 SYSVLONG=9.04.01M3P062415SYSSCP=LIN X64 上)。

也许可以尝试以下稍微不同的做法?

%let file = %sysfunc(pathname(work))/new.xml;

proc lua restart;
submit;
    local file_name = sas.symget("file")
    print (file_name)
    file = io.open (file_name, "w")
    io.output(file) -- sets default output
    io.write ("<test>", "\n")
    io.write ("write to file", "\n")
    io.write ("</test>", "\n")
    io.close(file)
endsubmit;
run;
2019-05-26 19:49:26