i need to create a function named breakline which inputs a string (char, 1 × N) and a linewidth (integer, scalar). The function then splits the string into smaller strings which are smaller than the linewidth.
The output to the function is an array which contains all of the split up lines (cell array, 1 × M).
for example
out=breakupLine(123456789,4)
out =
{
[1,1] = 1234
[1,2] = 5678
[1,3] = 9
}

1 Kommentar

Walter Roberson
Walter Roberson am 28 Mär. 2020
It is not possible to get the output in exactly that format. The initial part showing the index can only appear if you create the output as all one character vector, contradicting the requirement that it be a cell array.

Melden Sie sich an, um zu kommentieren.

Antworten (4)

Walter Roberson
Walter Roberson am 28 Mär. 2020

0 Stimmen

If the current vector is shorter than N or exactly N then add the complete current vector to the end of the cell array and return. Otherwise index the first N characters from the current vector and add them to the end of the cell array, and remove N characters from the beginning of the current vector overwriting the current vector and loop back.

2 Kommentare

Mitchie Teotico
Mitchie Teotico am 29 Mär. 2020
could you show an example
Walter Roberson
Walter Roberson am 29 Mär. 2020
ThisRow = RemainingLetters(1:4);
RemainingLetters = RemainingLetters(5:end);

Melden Sie sich an, um zu kommentieren.

Nik Niki
Nik Niki am 22 Mai 2022
Bearbeitet: Image Analyst am 22 Mai 2022

0 Stimmen

test_data_name="kjashfk, kjasdklasdfas, 3";
test_data_name = split(test_data_name)
test_data_name = 3×1 string array
"kjashfk," "kjasdklasdfas," "3"
Image Analyst
Image Analyst am 22 Mai 2022

0 Stimmen

Here is one way:
out=breakupLine('123456789', 4)
out = 1×3 cell array
{'1234'} {'5678'} {'9'}
%=====================================================
function out=breakupLine(str, substringLength)
stringLength = length(str);
loopCounter = 1;
for k = 1 : substringLength : stringLength
index1 = k;
index2 = min(k + substringLength - 1, stringLength);
out{loopCounter} = str(index1 : index2);
loopCounter = loopCounter + 1;
end
end
DGM
DGM am 22 Mai 2022

0 Stimmen

To address the OP's particular request:
linew = 4;
teststr = '123456789';
excess = rem(numel(teststr),linew);
output = reshape(teststr(1:end-excess),linew,[]).';
output = [num2cell(output,2); teststr(end-excess+1:end)]
output = 3×1 cell array
{'1234'} {'5678'} {'9' }
I don't know that this is particularly efficient, but it works. It may have advantages at some scale, but I haven't tested that.

Kategorien

Mehr zu Characters and Strings finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 28 Mär. 2020

Beantwortet:

DGM
am 22 Mai 2022

Community Treasure Hunt

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

Start Hunting!

Translated by