stringx (util v1.3.5)
View SourceImplements miscelaneous string functions
Some implementation authored by Evan Miller: http://www.evanmiller.org/joy-of- erlang.html
Author: Serge Aleynikov saleyn@gmail.com Copyright: 2006 Serge Aleynikov
Summary
Functions
Align rows of terms by stringifying them to uniform column width. If some row
doesn't need to be aligned, pass its value as a binary. Options can be
Split a list into batches of N items
Convert format and arguments to binary/list shortening . This function can be
used by Elixir, which is missing the equivalent of io_lib.format/2
Convert format and arguments to binary/list shortening . This function can be
used by Elixir, which is missing the equivalent of io_lib.format/2
The same as uef_format:format_number/4 with #{} as the forth argument. See:
format_number/4.
Formats Number by adding thousands separator between each set of 3 digits to the left of the decimal point, substituting Decimals for the decimal point, and rounding to the specified Precision. Returns a binary value.
Formats Number in price-like style. Returns a binary containing FormattedPrice formatted with a precision of 2 and decimal digits of 2. The same as format_price/2 with a precision of 2 as the second argument. See uef_format:format_price/2 docs.
Formats Number in price-like style. Returns a binary containing FormattedPrice
formatted with a specified precision as the second argument and decimal digits
of 2. The same as uef_format:format_price/3 with #{} as the third argument. See:
format_price/3.
Formats Number in price-like style. Returns a binary containing FormattedPrice formatted with a specified precision as the second argument, decimal digits of 2, and with ccy symbol (or options) as the third argument. If CcySymbol_OR_Options is a map the functions works as format_number/4 with decimal digits of 2 as the third argument and with options as the forth one. If CcySymbol_OR_Options is a binary or a string, the corresponding ccy symbol is added to the left.
Parse a given CSV file.
Parse a given CSV file.
Pretty print table of lists/tuples/maps to list. The following options control formatting behavior
Pretty print list of maps to list. See: pretty_table/3..
Pretty print table of lists/tuples/maps to list. See: pretty_table/3..
Rounds the number to the specified precision.
Rounds the number to the precision of 2.
Convert words in a string to capitalize first letter of each word.
Wrap words list in a string to multiple lines that fit the margin There are two uses of this function: First
Wrap words list in a string to multiple lines that fit the margin Example
Types
-type decimals() :: 0..253.
-type formatted_number() :: binary().
-type precision() :: integer().
-type pretty_print_opts() :: #{number_pad => char(), header => boolean(), unicode => boolean(), outline => none | full | [top | left | bottom | right], th_dir => both | leading | trailing, td_dir => both | leading | trailing, td_pad => #{integer() => both | leading | trailing}, td_start => integer(), td_exclude => list(), td_sep => string(), tr_sep => string(), tr_sep_td => string(), prefix => string(), thousands => string() | binary(), translate => fun((term()) -> term()), footer_rows => integer(), td_formats => tuple() | fun((ColVal :: term()) -> {string, string()} | {number, string() | number()} | {number, Decimals :: integer(), ColVal :: number()} | {ccy, number()}), thousands => string() | binary(), ccy_sym => string() | binary(), ccy_sep => string() | binary(), ccy_pos => left | right}.
Functions
-spec align_rows(Rows :: [tuple() | binary() | list()], Options :: [{pad, Dir :: [trailing | leading | both | {Pos :: integer() | last, trailing | leading | both | none}]} | {exclude, Cols :: [integer()]} | {return, Ret :: tuple | list} | {type, binary | charlist} | {prefix, string()} | {ignore_empty, boolean()}]) -> [AlignedRow :: tuple() | list()].
Align rows of terms by stringifying them to uniform column width. If some row
doesn't need to be aligned, pass its value as a binary. Options can be:
Rows is a list. All rows must have the same arity except if a row is a binary.
Options contain:
{pad, Direction}— Column padding direction, whereDirectionis one ofleading,trailing,{Position::integer(), leading|trailing|none},{last, leading|trailing|none}{type, binary|charlist}— Return columns in the result rows as binaries or charlists (default){return, tuple|list}— Return result rows as lists or tuples{prefix, string()}— Prefix first item in each row with this string{ignore_empty, boolean()}— Don't pad trailing empty columns if this option is true{exclude, [integer()]}— Exclude given column numbers
Split a list into batches of N items
Convert format and arguments to binary/list shortening . This function can be
used by Elixir, which is missing the equivalent of io_lib.format/2
Convert format and arguments to binary/list shortening . This function can be
used by Elixir, which is missing the equivalent of io_lib.format/2
-spec format_integer(integer()) -> formatted_number().
-spec format_integer(integer(), format_number_opts()) -> formatted_number().
-spec format_number(number(), precision(), decimals()) -> formatted_number().
The same as uef_format:format_number/4 with #{} as the forth argument. See:
format_number/4.
-spec format_number(number(), precision(), decimals(), format_number_opts()) -> formatted_number().
Formats Number by adding thousands separator between each set of 3 digits to the left of the decimal point, substituting Decimals for the decimal point, and rounding to the specified Precision. Returns a binary value.
-spec format_price(Number :: number()) -> FormattedPrice :: formatted_number().
Formats Number in price-like style. Returns a binary containing FormattedPrice formatted with a precision of 2 and decimal digits of 2. The same as format_price/2 with a precision of 2 as the second argument. See uef_format:format_price/2 docs.
-spec format_price(Number :: number(), Precision :: precision()) -> formatted_number().
Formats Number in price-like style. Returns a binary containing FormattedPrice
formatted with a specified precision as the second argument and decimal digits
of 2. The same as uef_format:format_price/3 with #{} as the third argument. See:
format_price/3.
-spec format_price(Number :: number(), Precision :: precision(), CcySymbol_OR_Options :: format_number_opts() | ccy_sym()) -> FormattedPrice :: formatted_number().
Formats Number in price-like style. Returns a binary containing FormattedPrice formatted with a specified precision as the second argument, decimal digits of 2, and with ccy symbol (or options) as the third argument. If CcySymbol_OR_Options is a map the functions works as format_number/4 with decimal digits of 2 as the third argument and with options as the forth one. If CcySymbol_OR_Options is a binary or a string, the corresponding ccy symbol is added to the left.
Parse a given CSV file.
Parse a given CSV file.
-spec pretty_print_table([map()]) -> ok.
Pretty print table of lists/tuples/maps to list. The following options control formatting behavior:
header— When true (default), output header rownumber_pad— Leading padding character used for numbersth_dir— Table header row padding direction (both|leading|trailing)td_dir— Table row padding direction (both|leading|trailing)td_start— Don't print columns less than this (e.g. use 2 for records)td_exclulde— List of column ID's (starting with 1) or names to excludetd_pad— A map containing column padding directions#{Col::integer() => both|leading|trailing.td_sep— Column separator (default" | ")tr_sep— Row separator (default"-")tr_sep_td— Column delimiter used in separating rows ("+")prefix— Prepend each row with this stringtd_formats— A tuple containing column formats. Each value is either a format string passed toio_lib:format/2or a function taking either one argumentfun(Value) -> {number|string, FormattedValue::string()}or three argumentsfun(Key,Value,Row::tuple()|map()) -> {number|string, FormattedValue::string()}. This three argument function can perform calculation of the field value based on values of other fields in theRow.unicode— Use unicode outline charactersoutline— Draw top, left and line box outline (by default only the bottom one is drawn). Values:none- on outline boxfull- outline box on all 4 sides[top, left, bottom, right]- outline box on given sides
Example:
1> stringx:pretty_print_table(
{a,b,c,d}, [{a, 10, ccc}, {bxxx, 200.00123, 'Done'}, {abc, 100.0, xx}],
#opts{td_dir=both, td_exclude=[d], td_formats=
{undefined, fun(V) when is_integer(V) -> {number, integer_to_list(V)};
(V) when is_float(V) -> {number, float_to_list(V, [{decimals, 5}])}
end, "~w"}}).
a | b | c
-----+-----------+-------
a | 10 | ccc
bxxx | 200.00123 | 'Done'
-----+-----------+-------
-spec pretty_print_table([string() | binary() | atom()] | tuple(), [map() | list()], #opts{number_pad :: char(), header :: boolean(), th_dir :: both | leading | trailing, td_dir :: both | leading | trailing, td_pad :: map(), td_start :: integer(), td_exclude :: list(), td_sep :: string(), tr_sep :: string(), tr_sep_td :: string(), prefix :: string(), translate :: term(), footer_rows :: integer(), td_formats :: undefined | tuple(), thousands :: undefined | string() | binary(), ccy_sym :: undefined | string() | binary(), ccy_sep :: string() | binary(), ccy_pos :: left | right, outline :: none | full | [top | bottom | left | right] | map(), unicode :: boolean()} | map()) -> ok.
Pretty print list of maps to list. See: pretty_table/3..
Pretty print table of lists/tuples/maps to list. See: pretty_table/3..
-spec pretty_table([string() | binary() | atom()] | tuple(), [Row :: tuple() | list() | map()], Opts :: map() | #opts{number_pad :: char(), header :: boolean(), th_dir :: both | leading | trailing, td_dir :: both | leading | trailing, td_pad :: map(), td_start :: integer(), td_exclude :: list(), td_sep :: string(), tr_sep :: string(), tr_sep_td :: string(), prefix :: string(), translate :: term(), footer_rows :: integer(), td_formats :: undefined | tuple(), thousands :: undefined | string() | binary(), ccy_sym :: undefined | string() | binary(), ccy_sep :: string() | binary(), ccy_pos :: left | right, outline :: none | full | [top | bottom | left | right] | map(), unicode :: boolean()}) -> list().
Rounds the number to the specified precision.
Rounds the number to the precision of 2.
Convert words in a string to capitalize first letter of each word.
Wrap words list in a string to multiple lines that fit the margin There are two uses of this function: First:
1> stringx:wordwrap("abc efg exdf"], 8, "\n"). "abc efg\nexdf"Second:
1> stringx:wordwrap(["abc", "efg", "exdf"], 8, ","). ["abc,efg,","exdf"]The second use is deprecated. Use wrap_words/3 instead.
Wrap words list in a string to multiple lines that fit the margin Example:
1> stringx:wrap_words(["abc", "efg", "exdf"], 8, ","). ["abc,efg,","exdf"]