我创建了一个HTML表单来浏览csv fil。 in' analyse.prolog'我需要一个prolog代码来获取文件名以将其作为loadCSV函数的输入(例如我应该得到:" file.csv"我将调用loadCsv(" file.csv&#34) ;);你能帮助我吗? 这是我的表单代码:
<form name='F'
action='analyse.prolog'
method='POST'
enctype='multipart/form-data'>
<label>Fichier : </label>
<input type="file"
name="fname"
style="color:rgb(51,153,255);
border-color:rgb(100,153,0);
border-style:solid;"
size="200px" >
<br>
<br>
<input type="submit" class="button" value="Analyser" />
</form>
答案 0 :(得分:1)
使用SWI-Prolog Web基础结构,通过以下步骤轻松获取文件名:
在您的情况下,您可以使用例如:
:- http_handler(root('analyse.prolog'), handle_upload, []).
在提交表单时,以HTTP请求作为参数调用handle_upload/1
。
handle_upload/1
可以按如下方式开始:
handle_upload(Request) :- http_read_data(Request, Data, [on_filename(file_upload)]), ...
解析此表单时自动调用file_upload/N+3
,如下所示:
file_upload(Stream, name_content(Name,Content), Options) :- option(filename(Name), Options), read_string(Stream, _, Content).
请注意在这种情况下自动添加的其他参数。特别是,文件名在传递的Options
中可用。我们读取了文件内容,并传回了name_content/2
形式的结构。
此构造使文件名在handle_upload/1
的延续中可用。因此,定义可以继续如下:
handle_upload(Request) :- http_read_data(Request, Data, [on_filename(file_upload)]), option(fname(name_content(Name,Content)), Data), ...
此处,fname
是您为此输入字段指定的 HTML名称,name_content/2
包含已传递的文件名和文件内容。
FileUpload.txt
提供了一个更完整的示例。