Skip to content

Sam-C/fstring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

F-String

Test Open in MATLAB Online

F-String is like sprintf(), but more readable and concise. It provides a way to interpolate variables and expressions inside a string for formatting. Simply wrap the expressions in curly braces {}, pass the string to f(), and it will return the formatted string. These expressions can include variables, arithmetic operations, function calls, and more.

F-String is inspired by Python f-strings (formatted string literals).

Motivation

While sprintf() is handy for string formatting, it can be hard to write and read when there are many variables. F-String is simpler:

% sprintf()
sprintf("Product ID: %d, Name: %s, Description: %s, Price: %f, Quantity: %d, Date Added: %s, In Stock: %s", id, name, description, price, quantity, date_added, string(is_in_stock))

% f-string
f("Product ID: {id}, Name: {name}, Description: {description}, Price: {price}, Quantity: {quantity}, Date Added: {date_added}, In Stock: {is_in_stock}")

Usage

  • Variables: Variables can be directly inserted into f-strings using curly braces.  (By default, they are converted to string with string().)
>> name = "F-String";
>> f("Hello {name}!")
ans =
    "Hello F-String!"
  • Expressions: Arithmetic operations and function calls can be included within the curly braces.
>> x = 4;
>> f("{1 + sqrt(x)}")
ans =
    "3"
  • Arrays, Cell Arrays, Structs: They can also be included using curly braces.
>> myArray = [1,2,3];
>> myCellArray = {'a','b','c'};
>> myStruct.a = 10;
>> myStruct.b = 20;
>> f("{myArray(3)} {myCellArray{3}} {myStruct.a} {myStruct.('b')}")
ans =
    "3 c 10 20"
  • Debugging: F-strings can simplify debugging by printing variable names and original expressions along with their values. Simply add = specifier after an expression.
>> device = 'Sensor1';
>> temperatureC = 25.5;
>> humidity = 70.0;
>> f('Readings {device=}, {temperatureC=}°C, {humidity=}%')
ans =
    'Readings device=Sensor1, temperatureC=25.5°C, humidity=70%'

% Spaces in expression and around '=' are respected
>> f('{temperatureC * (9/5) + 32 = }°F')
ans =
    'temperatureC * (9/5) + 32 = 77.9°F'
  • Format specifier: F-strings support advanced formatting options such as specifying type, precision, and field width for the embedded expressions, using MATLAB's format specifier.
>> f('{12648430:%#X}')   % hexadecimal format
ans =
    '0XC0FFEE'

>> f('{0.123456789:%0.3f}')   % precision
ans =
    '0.123'

>> f('{123:%5d}')   % field width
ans =
    '  123'

>> f('{22 / 7 = :%0.3f}')   % using both debugging and format specifier
ans =
    '22 / 7 = 3.143'
  • Print Curly Braces: To print curly braces, escape them with double curly braces {{ }}.
>> f('text{{text}}text')
ans =
    'text{text}text'
  • Special Characters: To print special characters, use standard MATLAB escape sequence (see section "Text Before or After Formatting Operators").
>> f("1\t2\n3")
ans =
    "1	2
     3"

>> f('unicode heart: \x2665')
ans =
    'unicode heart: ♥'

>> f('50%')   % an exception is that '%' does not need to be escaped
ans =
    '50%'

More

  • Cell scalars can be embedded in expressions. They are converted to string with string().
>> f("{ {{42}} }")
ans =
    "42"
  • Arrays cannot be embedded in expressions because they cannot be converted to string with string().
>> f("myArray = {[1,2,3]}")
Error using [string](matlab:matlab.lang.internal.introspective.errorDocCallback('string'))  
Conversion from cell failed. Element 1 must be convertible  
to a string scalar.
  • Nested f-string expressions will work as long as inner quotation marks are escaped the usual MATLAB way:
>> f('<a>{ f("<b>{ f(''c'') }</b>") }</a>')
ans =
    '<a><b>c</b></a>'
  • See FstringTest.m for more use cases.

  • See the f.m source code for how f-string works.

Installation

Download the source code from either MATLAB File Exchange or GitHub, unzip if needed, and place f.m somewhere on your MATLAB path.

Acknowledgement

Thanks to these projects for inspiration:

License

FString is open-sourced software licensed under the MIT license.

About

Python-like F-String for MATLAB

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages