In particular it is helpful to format your code by using triple backticks ```. Here’s what that looks like:
using CSV, Tables
function read_data_file(filename::String)
CSV.File(filename; header=false, skipto=6) |> Tables.matrix
end
function parse_width_and_thickness(filename::String)
l::String = “”
for (i, line) in enumerate(eachline(filename))
l = line
if i == 3
break
end
end
first_split_string = split(l, “,”)
width = parse(Float64, strip(split(first_split_string[3], "=")[2], '"'))
thickness = parse(Float64, split(split(first_split_string[4], “=”)[2], '"')[1])
(width, thickness)
end
datafile = realpath(dirname(@FILE)*"/…/data/data.csv")
function convert_to_true_stress_and_strain(filename::String)
A = broadcast(*, width, thickness)
P = CSV.File("data.csv"; select=[4])
ϭE = broadcast(/, P, A)
strain = ln(1 + ϭE)
stress = ϭE * ( 1 + ϭE)
(strain, stress)
end
When put this way it’s a bit easier to see what’s going wrong - your code snippet just defines three functions (read_data_file, parse_width_and_thickness, and convert_to_true_stress_and_strain), but doesn’t actually call any of the functions. If you want to get values for strain and stress (presumably from your convert_to_true_stress_and_strain function), you need to actually call it like
convert_to_true_stress_and_strain("path_to_my_file")
More generally you seem to be a little confused about how functions and variables work, take the convert_to_true_stress_and_strain for example:
- You define it to accept a single argument
filename, which isn’t actually used anywhere in the function body - The first line
A = broadcast(*, width, thickness)uses two variables (widthandthickness) which aren’t defined anywhere in the function body - You then load in some data as
P = CSV.File("data.csv"; select=[4])- this is probably where you actually want to use thefilenameargument (otherwise the behaviour of the function will depend on which directory you are in when you call it)
Note also that broadcast is almost never used in everday user code, where people reach for the broadcast operator . instead:
A = broadcast(*, width, thickness)
ϭE = broadcast(/, P, A)
should probably be
A = width .* thickness
ϭE = P ./ A