如何解决如何处理 OCAML 列表的元素?
我想处理文件“persons.txt”中的数据。 但我已经尝试了一切来处理文本文件中的所有行。
我处理数据的唯一方法是手动创建列表。
let myList = ["John";"23"]
我希望程序遍历文本文件的所有行。 我设法将文本文件的所有内容传递到列表中,但我似乎无法从那个阶段继续前进。
我的想法是:
你能指导我吗?
谢谢!!
open Printf
(* FILE CONTENTS *)
(*
John;23;
Mary;16;
Anne;21;
*)
let file = "data/persons.txt"
;;
(* READ FROM EXTERNAL FILE *)
let read_lines name : string list =
if Sys.file_exists (name) then
begin
let ic = open_in name in
try
let try_read () =
try Some (input_line ic) with End_of_file -> None in
let rec loop acc = match try_read () with
| Some s -> loop (s :: acc)
| None -> close_in_noerr ic; List.rev acc in
loop []
with e ->
close_in_noerr ic;
[]
end
else
[]
;;
(...)
解决方法
你的问题一点都不清楚。以下是一些观察结果:
首先,您的 read_lines
函数不会以您需要的形式返回输入。
read_lines
返回的内容如下所示:
["John;23;"; "Mary;16;"; "Anne;21;"]
但你想要的是更像这样的东西:
[("约翰","23)"; (“玛丽”,“16”); (“安妮”,“21”)]
这里的关键是使用 ;
作为分隔符将字符串分成几部分。您可能可以使用 String.split_on_char
来实现这一点。
其次,您没有定义一个函数来计算参数的答案。相反,您的计算基于全局变量。这不会一概而论。
而不是这样说:
let adult_check_condition =
... using global age and name ...
你需要定义一个函数:
let adult_check_condition age name =
... use parameters age and name ...
然后你可以用不同的年龄和名字调用这个函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。