~1 min read

Categories

I always have needs to find numbers from a formatted string using Matlab. For example, find the lats and longs for all the grid cells of a river basin based on a bunch of input files, something like forcings_35.25_-100.75. Then in Matlab you have two ways to read these numbers out.

using ‘sscanf’. It’s kinda stupid that you can’t find the two numbers by

sscanf('forcings_35.25_-100.75','%s_%f_%f')

instead, you will get an 1d array that contains 22 numbers, with each number representing a single character in that string. What you need to do is using

sscanf('forcings_35.25_-100.75','forcings_%f_%f')

I guess the reason behind this is that sscanf can only output one numerical matrix that based on the first character it processes. So if you do

sscanf('35.25_-100.75_forcings','%f_%f_%s')

you will get the first two number you want, followed by 8 numbers representing the string “forcings”.

Another way is to use “textscan”. I feel safer using this method.

A = textscan('forcings_35.25_-100.75','%s %f %f', 'Delimiter', '_')

This way, you will end up getting a three cell array representing the three parts separated by “_” in the string. Then simply using cell2mat() to convert the numbers to regular array. To convert “forcings” to string, using

char(A{1})