Calculate the strain and stress from CSV file

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 (width and thickness) 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 the filename argument (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