Открытие файла с нарушением прав доступа из proc LUA - PullRequest
2 голосов
/ 26 мая 2019

Я программирую на SAS и хочу написать XML-файл для создания, используя LUA

Итак, сначала я запускаю 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/>

Но это приводит к следующим сообщениям в журнале

NOTE: Lua initialized.
\\ourCompany\ourTeam\ourProject\myFile.xml
DEBUG: before opening
DEBUG: after opening, before writing
DEBUG: after writing, before closing

ERROR:  An exception has been encountered.
Please contact technical support and provide them with the following traceback information:

The SAS task name is [LUA (2)]
ERROR:  Read Access Violation LUA (2)
Exception occurred at (89400CB7)
Task Traceback
Address   Frame     (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

NOTE: The SAS System stopped processing this step because of errors.

Я понятия не имею, является ли это чисто проблемой LUA или чем-то связанным с proc LUA в SAS.

Поскольку последнее сообщение отладки не печатается, проблема возникает при закрытии файла.Я попробовал несколько различных опций для команды open и попытался удалить io.write, но это не помогло.

1 Ответ

1 голос
/ 26 мая 2019

Ваш код работал нормально для меня (на SYSVLONG=9.04.01M3P062415, SYSSCP=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;
...