我已经发布了一些关于文件IO的问题我只是想找到适合我需要的问题,我发现并且我也googled分配所以我想我的最终文件IO问题是(你会看到一些伪代码)在这里):
let ic = open_in "myfile.txt" in
try
while true do
let line = input_line ic in
line += "\n" + line
done
with End_of_file -> close_in ic;
print_endline line;;
我已经尝试过String.concat“\ n”(行;行),显然它无效但我不确定在这种情况下如何使用String.concat方法。
答案 0 :(得分:4)
在这种情况下,字符串连接不充分,因为str1 ^ str2
需要时间和内存线性的大小总和,因此迭代连接将表现出二次行为 - 您希望避免这种情况。
您的问题有几种解决方案:
String.concat : string -> string list -> string
函数(documentation)将它们全部连接起来。
let read_file file =
let ic = open_in file in
let buf = Buffer.create (in_channel_length ic) in
try
while true do
let line = input_line ic in
Buffer.add_string buf line;
Buffer.add_char buf '\n';
done; assert false
with End_of_file ->
Buffer.contents buf
;;
let read_file file =
let ic = open_in file in
let lines = ref [] in
try
while true do
let line = input_line ic in
lines := line :: !lines
done; assert false
with End_of_file ->
String.concat "\n" !lines
let test = read_file "blah.ml"