update
This commit is contained in:
+35
-65
@@ -150,11 +150,8 @@ end
|
|||||||
|
|
||||||
# ---------------------------------------------- 100 --------------------------------------------- #
|
# ---------------------------------------------- 100 --------------------------------------------- #
|
||||||
|
|
||||||
""" read_textfile_by_index(folder_path::String, read_file_number::Integer=1)
|
""" Reads the x-th text file from a folder, where files are listed by the OS
|
||||||
|
without explicit sorting. Returns the file number, filename, and content.
|
||||||
# What it does
|
|
||||||
- Reads the x-th text file from a folder, where files are listed by the OS
|
|
||||||
without explicit sorting. Returns the file number, filename, and content.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `folder_path::String`
|
- `folder_path::String`
|
||||||
@@ -207,14 +204,12 @@ end
|
|||||||
|
|
||||||
|
|
||||||
""" Recursively convert dictionary-like variable (e.g. JSON.Object) into a dictionary.
|
""" Recursively convert dictionary-like variable (e.g. JSON.Object) into a dictionary.
|
||||||
|
The function walks any nested structure composed of `AbstractDict` (e.g., `JSON.Object`,
|
||||||
# What it does
|
`Dict`, `OrderedDict`) and `AbstractArray` and produces a new tree where
|
||||||
- Walks any nested structure composed of `AbstractDict` (e.g., `JSON.Object`,
|
every dictionary-like node is a plain `Dict` and every array-like node is a
|
||||||
`Dict`, `OrderedDict`) and `AbstractArray` and produces a new tree where
|
`Vector{Any}`. Scalar values (numbers, strings, booleans, `nothing`, etc.)
|
||||||
every dictionary-like node is a plain `Dict` and every array-like node is a
|
are returned unchanged.
|
||||||
`Vector{Any}`. Scalar values (numbers, strings, booleans, `nothing`, etc.)
|
Does **not** mutate the input; it always allocates new containers.
|
||||||
are returned unchanged.
|
|
||||||
- Does **not** mutate the input; it always allocates new containers.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `x`
|
- `x`
|
||||||
@@ -299,14 +294,12 @@ end
|
|||||||
# ---------------------------------------------- 100 --------------------------------------------- #
|
# ---------------------------------------------- 100 --------------------------------------------- #
|
||||||
|
|
||||||
""" Recursively convert dictionary-like variable (e.g. JSON.Object) into a dictionary.
|
""" Recursively convert dictionary-like variable (e.g. JSON.Object) into a dictionary.
|
||||||
|
The function walks any nested structure composed of AbstractDict (e.g., JSON.Object,
|
||||||
# What it does
|
Dict, OrderedDict) and AbstractArray and produces a new tree where
|
||||||
- Walks any nested structure composed of AbstractDict (e.g., JSON.Object,
|
every dictionary-like node is an OrderedDict{Any,Any} and every array-like
|
||||||
Dict, OrderedDict) and AbstractArray and produces a new tree where
|
node is a Vector{Any}. Scalar values (numbers, strings, booleans,
|
||||||
every dictionary-like node is an OrderedDict{Any,Any} and every array-like
|
nothing, etc.) are returned unchanged.
|
||||||
node is a Vector{Any}. Scalar values (numbers, strings, booleans,
|
Does **not** mutate the input; it always allocates new containers.
|
||||||
nothing, etc.) are returned unchanged.
|
|
||||||
- Does **not** mutate the input; it always allocates new containers.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `x`
|
- `x`
|
||||||
@@ -474,10 +467,8 @@ function randomChoiceOnTarget(target::AbstractVector, choiceList::AbstractVector
|
|||||||
end
|
end
|
||||||
|
|
||||||
""" Compute the linearly weighted average of an array.
|
""" Compute the linearly weighted average of an array.
|
||||||
|
The function assigns weights proportional to position indices (1, 2, 3, ...) to array
|
||||||
# What it does
|
elements and returns the weighted average.
|
||||||
- Assigns weights proportional to position indices (1, 2, 3, ...) to array
|
|
||||||
elements and returns the weighted average.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `a::Array`
|
- `a::Array`
|
||||||
@@ -512,10 +503,8 @@ end
|
|||||||
|
|
||||||
|
|
||||||
""" Convert a variable's value (String) into a Symbol.
|
""" Convert a variable's value (String) into a Symbol.
|
||||||
|
The function takes a variable containing a String value and converts it to a Symbol
|
||||||
# What it does
|
using Julia's expression interpolation mechanism.
|
||||||
- Takes a variable containing a String value and converts it to a Symbol
|
|
||||||
using Julia's expression interpolation mechanism.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `variable`
|
- `variable`
|
||||||
@@ -585,11 +574,9 @@ end
|
|||||||
|
|
||||||
|
|
||||||
""" Draw unique elements from a list without replacement.
|
""" Draw unique elements from a list without replacement.
|
||||||
|
The function randomly selects a specified number of distinct elements from a collection,
|
||||||
# What it does
|
optionally excluding certain elements from consideration. Uses in-place
|
||||||
- Randomly selects a specified number of distinct elements from a collection,
|
shuffling for efficiency.
|
||||||
optionally excluding certain elements from consideration. Uses in-place
|
|
||||||
shuffling for efficiency.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `drawOptions::Array`
|
- `drawOptions::Array`
|
||||||
@@ -789,10 +776,7 @@ function selectRange(d::Dict{Symbol, <:AbstractVector}, range)
|
|||||||
return newDict
|
return newDict
|
||||||
end
|
end
|
||||||
|
|
||||||
""" assignDict!(dict::Dict, accessArray::Array{Symbol}, valueToAssign)
|
""" Recursively traverses a nested dictionary structure using a vector of keys
|
||||||
|
|
||||||
# What it does
|
|
||||||
- Recursively traverses a nested dictionary structure using a vector of keys
|
|
||||||
and assigns a value to the final key. Creates intermediate dictionaries
|
and assigns a value to the final key. Creates intermediate dictionaries
|
||||||
if they don't exist.
|
if they don't exist.
|
||||||
|
|
||||||
@@ -852,11 +836,8 @@ function assignDict!(dict::Dict, accessArray::Array{Symbol}, valueToAssign)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
""" iTime(h::Integer, m::Integer)
|
""" Converts hour (0-23) and minute (0-59) into a Julia `Time` object using
|
||||||
|
12-hour format with AM/PM indicator.
|
||||||
# What it does
|
|
||||||
- Converts hour (0-23) and minute (0-59) into a Julia `Time` object using
|
|
||||||
12-hour format with AM/PM indicator.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `h::Integer`
|
- `h::Integer`
|
||||||
@@ -931,12 +912,9 @@ function limitvalue(v::Number, lowerbound::Pair, upperbound::Pair)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
""" cartesianAssign!(a, b)
|
""" Assigns elements from matrix `b` to matrix `a` using the Cartesian indices
|
||||||
|
of `b`. Elements are copied in the order they appear when iterating over `b`,
|
||||||
# What it does
|
and placed into `a` at the corresponding Cartesian positions of `b`.
|
||||||
- Assigns elements from matrix `b` to matrix `a` using the Cartesian indices
|
|
||||||
of `b`. Elements are copied in the order they appear when iterating over `b`,
|
|
||||||
and placed into `a` at the corresponding Cartesian positions of `b`.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `a`
|
- `a`
|
||||||
@@ -1350,11 +1328,8 @@ function getStringBetweenCharacters(text::T, startChar::Char, endChar::Char;
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
""" mkDictPath!(dict::Union{Dict{Symbol, Any}, Dict{String, Any}}, addkeys::Union{Vector{String}, Vector{Symbol}}, value)
|
""" Recursively creates nested dictionary paths if they do not exist and assigns
|
||||||
|
a value to the final key. Similar to `mkpath()` but for dictionaries.
|
||||||
# What it does
|
|
||||||
- Recursively creates nested dictionary paths if they do not exist and assigns
|
|
||||||
a value to the final key. Similar to `mkpath()` but for dictionaries.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `dict::Union{Dict{Symbol, Any}, Dict{String, Any}}`
|
- `dict::Union{Dict{Symbol, Any}, Dict{String, Any}}`
|
||||||
@@ -1410,11 +1385,8 @@ function mkDictPath!(dict::Union{Dict{Symbol, Any}, Dict{String, Any}},
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
""" getDictPath(dict::Dict, keys::Vector)
|
""" Retrieves a value from a nested dictionary by traversing a vector of keys.
|
||||||
|
Creates intermediate dictionaries if they don't exist.
|
||||||
# What it does
|
|
||||||
- Retrieves a value from a nested dictionary by traversing a vector of keys.
|
|
||||||
Creates intermediate dictionaries if they don't exist.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `dict::Dict`
|
- `dict::Dict`
|
||||||
@@ -1652,12 +1624,10 @@ function textToDict(text::String, detectKeywords::Vector{String};
|
|||||||
end
|
end
|
||||||
|
|
||||||
""" Recursively convert dictionary into an HTML string representation.
|
""" Recursively convert dictionary into an HTML string representation.
|
||||||
|
The function walks a nested `AbstractDict` structure and produces a well-formed HTML string
|
||||||
# What it does
|
where each dictionary key becomes an HTML tag. Nested dictionaries become
|
||||||
- Walks a nested `AbstractDict` structure and produces a well-formed HTML string
|
nested tags, and scalar values (numbers, strings, etc.) become the text
|
||||||
where each dictionary key becomes an HTML tag. Nested dictionaries become
|
content of leaf tags.
|
||||||
nested tags, and scalar values (numbers, strings, etc.) become the text
|
|
||||||
content of leaf tags.
|
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `d::AbstractDict`
|
- `d::AbstractDict`
|
||||||
|
|||||||
+114
-88
@@ -13,31 +13,34 @@ using JSON, DataStructures, Distributions, Random, Dates, UUIDs, DataFrames
|
|||||||
|
|
||||||
# ---------------------------------------------- 100 --------------------------------------------- #
|
# ---------------------------------------------- 100 --------------------------------------------- #
|
||||||
|
|
||||||
""" Compute time different between start time and stop time in a given unit.
|
""" Computes the time difference between two `DateTime` values and returns the
|
||||||
Unit can be "milliseconds", "seconds", "minutes", "hours".
|
result in a specified unit: milliseconds, seconds, minutes, or hours.
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `starttime::DateTime`
|
- `starttime::DateTime`
|
||||||
start time
|
The starting `DateTime` value.
|
||||||
- `stoptime::DateTime`
|
- `stoptime::DateTime`
|
||||||
stop time
|
The ending `DateTime` value.
|
||||||
- `unit::String`
|
- `unit::String`
|
||||||
unit of time difference
|
The unit for the result. Must be one of: `"milliseconds"`, `"seconds"`,
|
||||||
|
`"minutes"`, `"hours"`.
|
||||||
|
|
||||||
# Return
|
# Return
|
||||||
- time difference in given unit
|
- `Integer`: The time difference converted to the specified unit.
|
||||||
|
|
||||||
# Example
|
# Notes
|
||||||
|
- The function computes `stoptime - starttime` and converts the result to the
|
||||||
|
requested unit using integer division.
|
||||||
|
- Errors with `ArgumentError` if an invalid unit is specified.
|
||||||
|
|
||||||
|
# Examples
|
||||||
```jldoctest
|
```jldoctest
|
||||||
julia> using Revise
|
|
||||||
julia> using GeneralUtils, Dates
|
julia> using GeneralUtils, Dates
|
||||||
julia> a = Dates.now()
|
julia> a = Dates.now()
|
||||||
julia> b = a + Dates.Day(5) # add 5 days
|
julia> b = a + Dates.Day(5)
|
||||||
julia> GeneralUtils.timedifference(a, b, "hours")
|
julia> timedifference(a, b, "hours")
|
||||||
120
|
120
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
function timedifference(starttime::DateTime, stoptime::DateTime, unit::String)::Integer
|
function timedifference(starttime::DateTime, stoptime::DateTime, unit::String)::Integer
|
||||||
diff = stoptime - starttime
|
diff = stoptime - starttime
|
||||||
@@ -184,21 +187,27 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
""" Get uuid4 with snake case
|
""" Generates a UUID4 (version 4) identifier and converts it to snake case by
|
||||||
|
replacing hyphens with underscores.
|
||||||
# Return
|
|
||||||
- `uuid4::String`
|
|
||||||
uuid4 with snake case
|
|
||||||
|
|
||||||
# Example
|
# Arguments
|
||||||
|
- This function takes no arguments.
|
||||||
|
|
||||||
|
# Return
|
||||||
|
- `String`: A UUID4 string with underscores instead of hyphens (e.g.,
|
||||||
|
`"0f6e4f_568c_4df4_8c79_1d7a58072f4a"`).
|
||||||
|
|
||||||
|
# Notes
|
||||||
|
- Uses the `uuid4()` function from the UUIDs standard library to generate a
|
||||||
|
random UUID.
|
||||||
|
- The underscore character replaces all hyphens in the UUID string.
|
||||||
|
|
||||||
|
# Examples
|
||||||
```jldoctest
|
```jldoctest
|
||||||
julia> using Revise
|
|
||||||
julia> using GeneralUtils
|
julia> using GeneralUtils
|
||||||
julia> GeneralUtils.uuid4snakecase()
|
julia> uuid4snakecase()
|
||||||
"0f6e4f_568c_4df4_8c79_1d7a58072f4a"
|
"0f6e4f_568c_4df4_8c79_1d7a58072f4a"
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
function uuid4snakecase()::String
|
function uuid4snakecase()::String
|
||||||
_id = string(uuid4())
|
_id = string(uuid4())
|
||||||
@@ -207,32 +216,37 @@ function uuid4snakecase()::String
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
""" Replace a dictionary key with the new key
|
""" Replaces keys in a dictionary according to a mapping, returning a new
|
||||||
|
dictionary with updated keys while preserving the original values.
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `d::Dict`
|
- `d::Dict`
|
||||||
The input dictionary that you want to modify
|
The input dictionary to modify.
|
||||||
- `replacementMap::Dict`
|
- `replacementMap::Dict`
|
||||||
A dictionary that maps old keys to new keys
|
A dictionary mapping old keys to new keys. Keys not present in this map are
|
||||||
|
left unchanged.
|
||||||
|
|
||||||
# Return
|
# Return
|
||||||
- `newDict::Dict`
|
- `Dict`: A new dictionary with replaced keys. Values are preserved from the
|
||||||
new dictionary with the replaced keys
|
original dictionary.
|
||||||
|
|
||||||
# Example
|
# Notes
|
||||||
|
- The function creates a new dictionary rather than modifying the input in
|
||||||
|
place.
|
||||||
|
- Keys not found in `replacementMap` are copied to the result with their
|
||||||
|
original keys unchanged.
|
||||||
|
|
||||||
|
# Examples
|
||||||
```jldoctest
|
```jldoctest
|
||||||
julia> using Revise
|
|
||||||
julia> using GeneralUtils
|
julia> using GeneralUtils
|
||||||
julia> d = Dict(:a => 1, :b => 2, :c => 3)
|
julia> d = Dict(:a => 1, :b => 2, :c => 3)
|
||||||
julia> replacement_map = Dict(:a => :x, :b => :y)
|
julia> replacement_map = Dict(:a => :x, :b => :y)
|
||||||
julia> new_dict = GeneralUtils.replaceDictKeys(d, replacement_map)
|
julia> replaceDictKeys(d, replacement_map)
|
||||||
Dict{Any, Any} with 3 entries:
|
Dict{Any, Any} with 3 entries:
|
||||||
:y => 2
|
:y => 2
|
||||||
:c => 3
|
:c => 3
|
||||||
:x => 1
|
:x => 1
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
function replaceDictKeys(d::Dict, replacementMap::Dict)::Dict
|
function replaceDictKeys(d::Dict, replacementMap::Dict)::Dict
|
||||||
newDict = Dict()
|
newDict = Dict()
|
||||||
@@ -294,36 +308,43 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
""" Execute a function with timer.
|
""" Executes a function with a timeout mechanism. If the function does not
|
||||||
|
complete within the specified time, it is interrupted and a timeout message
|
||||||
|
is returned.
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `f::Function`
|
- `f::Function`
|
||||||
a function to run
|
The function to execute.
|
||||||
- `timeoutwindow::Integer``
|
- `timeoutwindow::Integer`
|
||||||
timeout in seconds
|
The timeout duration in seconds.
|
||||||
|
|
||||||
# Keyword Argument
|
# Keyword Arguments
|
||||||
- `fargs`
|
- `fargs`
|
||||||
arguments for the function
|
Arguments to pass to the function `f`. If `nothing`, the function is called
|
||||||
- `timeoutmsg::String`
|
without arguments.
|
||||||
time out message
|
- `timeoutmsg::String`
|
||||||
|
The message to return if the function times out. Defaults to `"task timed out"`.
|
||||||
|
|
||||||
# Return
|
# Return
|
||||||
- task result otherwise timeout message
|
- The result of the function if it completes within the timeout, otherwise the
|
||||||
|
`timeoutmsg` string.
|
||||||
|
|
||||||
# Example
|
# Notes
|
||||||
```jldoctest
|
- Uses Julia's `@task`, `schedule`, and `Timer` to implement non-blocking
|
||||||
|
execution with interruption via `Base.throwto`.
|
||||||
|
- Errors with `InterruptException` if the function exceeds the timeout.
|
||||||
|
|
||||||
|
# Examples
|
||||||
|
```jldoctest
|
||||||
julia> function testfunc(x)
|
julia> function testfunc(x)
|
||||||
sleep(x)
|
sleep(x)
|
||||||
return "task done"
|
return "task done"
|
||||||
end
|
end
|
||||||
julia> result = timeout(testfunc, 10; fargs=20)
|
julia> result = timeout(testfunc, 10; fargs=20)
|
||||||
"task timed out"
|
"task timed out"
|
||||||
julia> result = timeout(testfunc, 20; fargs=10)
|
julia> result = timeout(testfunc, 20; fargs=10)
|
||||||
"task done"
|
"task done"
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
function timeout(f::Function, timeoutwindow::Integer; fargs=nothing, timeoutmsg="task timed out")
|
function timeout(f::Function, timeoutwindow::Integer; fargs=nothing, timeoutmsg="task timed out")
|
||||||
tsk = @task f(fargs)
|
tsk = @task f(fargs)
|
||||||
@@ -340,23 +361,26 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
""" Convert a dataframe into CSV.
|
""" Converts a DataFrame to a CSV string representation using the CSV.jl package.
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `df::DataFrame`
|
- `df::DataFrame`
|
||||||
A connection object to Postgres database
|
The DataFrame to convert to CSV format.
|
||||||
|
|
||||||
# Return
|
|
||||||
- `result::String`
|
|
||||||
|
|
||||||
# Example
|
# Return
|
||||||
|
- `String`: The DataFrame contents as a CSV-formatted string.
|
||||||
|
|
||||||
|
# Notes
|
||||||
|
- Uses `CSV.write` with an `IOBuffer` to capture the output as a string.
|
||||||
|
- The returned string contains the full CSV representation including headers.
|
||||||
|
|
||||||
|
# Examples
|
||||||
```jldoctest
|
```jldoctest
|
||||||
julia> using DataFrames, GeneralUtils
|
julia> using DataFrames, GeneralUtils
|
||||||
julia> df = DataFrame(A=1:3, B=5:7, fixed=1)
|
julia> df = DataFrame(A=1:3, B=5:7, fixed=1)
|
||||||
julia> result = GeneralUtils.dataframeToCSV(df)
|
julia> dataframeToCSV(df)
|
||||||
|
"1,5,1\n2,6,1\n3,7,1\n"
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
function dataframeToCSV(df::DataFrame)
|
function dataframeToCSV(df::DataFrame)
|
||||||
# Create an IOBuffer to capture the output
|
# Create an IOBuffer to capture the output
|
||||||
@@ -426,8 +450,6 @@ end
|
|||||||
3 => [Dict("a"=>7), Dict("a"=>8), Dict("a"=>9)]
|
3 => [Dict("a"=>7), Dict("a"=>8), Dict("a"=>9)]
|
||||||
4 => [Dict("a"=>10)]
|
4 => [Dict("a"=>10)]
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
function disintegrate_vectorDict(data::Vector, partsize::Integer
|
function disintegrate_vectorDict(data::Vector, partsize::Integer
|
||||||
)
|
)
|
||||||
@@ -473,8 +495,6 @@ end
|
|||||||
julia> getDataFrameValue(df[1, :], :name)
|
julia> getDataFrameValue(df[1, :], :name)
|
||||||
"Alice"
|
"Alice"
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
getDataFrameValue(row::DataFrameRow, key::Symbol) = row.:($key)
|
getDataFrameValue(row::DataFrameRow, key::Symbol) = row.:($key)
|
||||||
|
|
||||||
@@ -543,8 +563,6 @@ end
|
|||||||
julia> dfToString(df)
|
julia> dfToString(df)
|
||||||
"1) name: Alice, age: 25\n2) name: Bob, age: 30"
|
"1) name: Alice, age: 25\n2) name: Bob, age: 30"
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
function dfToString(df::DataFrame)
|
function dfToString(df::DataFrame)
|
||||||
dfstr = ""
|
dfstr = ""
|
||||||
@@ -583,8 +601,6 @@ end
|
|||||||
"{\"name\":\"Alice\",\"age\":25}"
|
"{\"name\":\"Alice\",\"age\":25}"
|
||||||
"{\"name\":\"Bob\",\"age\":30}"
|
"{\"name\":\"Bob\",\"age\":30}"
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
function dataframe_to_json_list(df::DataFrame)::Vector{String}
|
function dataframe_to_json_list(df::DataFrame)::Vector{String}
|
||||||
json_list = []
|
json_list = []
|
||||||
@@ -618,8 +634,6 @@ end
|
|||||||
julia> dict_to_string(od)
|
julia> dict_to_string(od)
|
||||||
"1) name: Alice, 2) age: 25"
|
"1) name: Alice, 2) age: 25"
|
||||||
```
|
```
|
||||||
|
|
||||||
# Signature
|
|
||||||
"""
|
"""
|
||||||
function dictToString(od::T) where {T<:AbstractDict}
|
function dictToString(od::T) where {T<:AbstractDict}
|
||||||
items = []
|
items = []
|
||||||
@@ -733,27 +747,39 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
""" Remove French accents from the given text.
|
||||||
remove_french_accents(text::String) -> String
|
|
||||||
|
|
||||||
Remove French accents from the given text.
|
The function replaces accented French characters with their non-accented
|
||||||
|
counterparts using a dictionary mapping. Supported accented characters
|
||||||
|
include: à, â, ä, á, é, è, ê, ë, î, ï, í, ñ, ô, ö, ò, ó, ù, û, ü, ÿ, ç,
|
||||||
|
and their uppercase variants. The apostrophe character `’` is removed
|
||||||
|
completely.
|
||||||
|
|
||||||
# Arguments
|
# Arguments
|
||||||
- `text::String` The input string containing French accents.
|
- `text::AbstractString`
|
||||||
|
The input string containing French accented characters.
|
||||||
|
|
||||||
# Returns
|
# Return
|
||||||
- `String` The input string with all French accents removed.
|
- `AbstractString`: A new string with all French accents replaced by their
|
||||||
|
non-accented equivalents.
|
||||||
|
|
||||||
|
# Notes
|
||||||
|
- The function creates a character list and replaces each accented character
|
||||||
|
according to an internal dictionary mapping.
|
||||||
|
- Does **not** mutate the input; it allocates a new string.
|
||||||
|
|
||||||
# Examples
|
# Examples
|
||||||
```jldoctest
|
```jldoctest
|
||||||
julia> remove_french_accents("Café")
|
julia> using GeneralUtils
|
||||||
"Cafe"
|
julia> remove_french_accents("Café")
|
||||||
|
"Cafe"
|
||||||
|
|
||||||
julia> remove_french_accents("L'été est beau.")
|
julia> remove_french_accents("L'été est beau.")
|
||||||
"L'ete est beau."
|
"L'ete est beau."
|
||||||
```
|
|
||||||
|
|
||||||
# Signature
|
julia> remove_french_accents("Noël, naïve, François")
|
||||||
|
"Noel, naive, Francois"
|
||||||
|
```
|
||||||
"""
|
"""
|
||||||
function remove_french_accents(text::AbstractString)::AbstractString
|
function remove_french_accents(text::AbstractString)::AbstractString
|
||||||
textcharlist = [i for i in text]
|
textcharlist = [i for i in text]
|
||||||
|
|||||||
Reference in New Issue
Block a user