对于大字符串,replace()失败

Bda*_*dar 7 julia

我有以下代码:

cd(joinpath(homedir(),"Desktop"))

using HDF5
using JLD

# read contents of a file
t = readall("sourceFile")

# remove unnecessary characters
t = replace(t, r"( 1:1\.0+)|(( 1:1\.0+)|(([1-6]:)|((\|user )|(\|))))", "")

# convert string into Float64 array (approximately ~140 columns)
data = readdlm(IOBuffer(t), ' ', char(10))

# save array on the hard drive
save("data.jld", "data", data)
Run Code Online (Sandbox Code Playgroud)

当我使用具有10 ^ 4或更少行数的sourceFile测试它时,它工作正常.但是当sourceFile有大约5*10 ^ 6行时,它会失败,t = replace(t, r"( 1:1\.0+)|(( 1:1\.0+)|(([1-6]:)|((\|user )|(\|))))", "")并显示以下消息

ERRORMSG

avi*_*iks 2

这个问题很旧,并且基于 Julia 的旧版本。但是,检查这是否适用于最新版本会很有用。我最近在最新版本的 Julia 中对此进行了测试0.5,上面的代码似乎可以正确处理 5*10^6 行,每行 600 个字符。整个操作在我的笔记本电脑上占用了大约 5G 的峰值内存。

julia> t=[randstring(600) for i=1:5*10^6];

julia> writecsv("/Users/aviks/tmp/long.csv", t)

julia> t=readstring("/Users/aviks/tmp/long.csv");

julia> length(t)
3005000000

julia> @time t = replace(t, r"( 1:1\.0+)|(( 1:1\.0+)|(([1-6]:)|((\|user )|(\|))))", "");
  43.599660 seconds (137 allocations: 3.358 GB, 0.85% gc time)
Run Code Online (Sandbox Code Playgroud)

(PS:请注意,readall现在已弃用,取而代之的是readstring)。