fprintf automatic spacing for strings of different lenghts

29 Ansichten (letzte 30 Tage)
Alexandre
Alexandre am 16 Okt. 2023
Kommentiert: Alexandre am 17 Okt. 2023
Hi,
how do i evenly space if I print this text using fprintf, in the example 1 below is what I get but I would like to output in the format of example 2, is there a way to automate the spacing if we the consecutive places and I have a string(name of place n) of different lenghts?
where cities is an array of strings show in the examples below and paths is a vector
for i = 1:(length(path)-1)
fprintf('%s --> %s (Distance = %s km)\n', cities(path(i)), cities(path(i+1)), num2str(matDist(min(... [path(i) path(i+1)]), max([path(i) path(i+1)]))));
end
fprintf('%s --> %s (Distance = %s km)\n', cities(path(end)), cities(path(1)), num2str(matDist(min(... [path(1) path(end)]), max([path(1) path(end)]))));
Example 1
Path and distance
----------------------------------------
Case fileName | Origin = Vila Ló(city 1)
----------------------------------------
Total Distance = 414 km
Vila Ló --> Pião (Distance = 46 km)
Pião --> Chão de Frades (Distance = 73 km)
Chão de Frades --> Salmorrete (Distance = 205 km)
Salmorrete --> Tortolindo (Distance = 33 km)
Tortolindo--> Vila Ló (Distance = 57 km)
Example 2
Path and distance
----------------------------------------
Case fileName | Origin = Vila Ló(place 1)
----------------------------------------
Total Distance = 414 km
Vila Ló --> Pião (Distance = 46 km)
Pião --> Chão de Frades (Distance = 73 km)
Chão de Frades --> Salmorrete (Distance = 205 km)
Salmorrete --> Tortolindo (Distance = 33 km)
Tortolindo --> Vila Ló (Distance = 57 km)
  2 Kommentare
Dyuman Joshi
Dyuman Joshi am 16 Okt. 2023
Verschoben: Dyuman Joshi am 16 Okt. 2023
Vectorized version -
%Sample data
cities1 = ["Vila Ló", "Pião", "Chão de Frades", "Salmorrete", "Tortolindo"];
cities2 = cities1([2 3 4 5 1]);
distance = [46 73 205 33 57];
%Convert the distance to strings with the desired precision
distance = compose("%d", distance);
n = repelem(max(strlength(cities1)),1,numel(cities1));
%If you need to add more spaces in between, modify n accordingly
%For e.g
%n = n+5;
fprintf('%-*s --> %-*s (Distance = %s km)\n', [n;cities1;n;cities2;distance])
Vila Ló --> Pião (Distance = 46 km) Pião --> Chão de Frades (Distance = 73 km) Chão de Frades --> Salmorrete (Distance = 205 km) Salmorrete --> Tortolindo (Distance = 33 km) Tortolindo --> Vila Ló (Distance = 57 km)

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Voss
Voss am 16 Okt. 2023
cities = ["Pasadena","Urbana-Champaign","Cambridge"];
path = 1:numel(cities);
d = [3200 1600 4800]; % using a vector of distances since I don't have your function matDist()
n = max(strlength(cities));
for i = 1:(length(path)-1)
fprintf('%-*s --> %-*s (Distance = %.f km)\n', n, cities(path(i)), n, cities(path(i+1)), d(i));
end
Pasadena --> Urbana-Champaign (Distance = 3200 km) Urbana-Champaign --> Cambridge (Distance = 1600 km)
fprintf('%-*s --> %-*s (Distance = %.f km)\n', n, cities(path(end)), n, cities(path(1)), d(end));
Cambridge --> Pasadena (Distance = 4800 km)
  3 Kommentare
Walter Roberson
Walter Roberson am 16 Okt. 2023
Using the %* facility is a bit obscure, but should work fine for this purpose.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Florian Bidaud
Florian Bidaud am 16 Okt. 2023
Bearbeitet: Florian Bidaud am 16 Okt. 2023
Something like this should do
cities = ["Vila Lo" "Piao" "Chao de Frades" "Salmorrete" "Tortolindo"];
path = [1 2 3 4 5];
distance = [46 73 205 3357]; % Should be replaced by your function matDist
max_city_len = max(strlength(cities));
for i = 1:(length(path)-1)
fprintf('%s %s --> %s %s (Distance = %s km)\n', cities(path(i)),repmat(' ',1,max_city_len-strlength(cities(path(i)))+1), repmat(' ',1,max_city_len-strlength(cities(path(i+1)))+1), cities(path(i+1)), num2str(distance(i)));
end
Vila Lo --> Piao (Distance = 46 km) Piao --> Chao de Frades (Distance = 73 km) Chao de Frades --> Salmorrete (Distance = 205 km) Salmorrete --> Tortolindo (Distance = 3357 km)
fprintf('%s %s --> %s %s (Distance = %s km)\n', cities(path(end)), repmat(' ',1,max_city_len-strlength(cities(path(end)))+1), repmat(' ',1,max_city_len-strlength(cities(path(1)))+1), cities(path(1)), num2str(distance(end)));
Tortolindo --> Vila Lo (Distance = 3357 km)

Kategorien

Mehr zu Startup and Shutdown finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by