Truncate strings to maximum length
77 ビュー (過去 30 日間)
古いコメントを表示
I have an array of strings (new strings, not old character arrays) of varying lengths, and I would like to truncate them to below some maximum length. I thought that extractBefore would be helpful, but it fails for strings shorter than the truncation length.
>> str = ["ab", "cdefg"];
>> extractBefore(str, 3) % this works fine
ans =
1×2 string array
"ab" "cd"
>> extractBefore(str, 4) % this fails
Error using extractBefore
Numeric value exceeds the number of characters in element 1.
This is my current solution:
>> arrayfun(@(s)extractBefore(s, min(4, s.strlength())+1), str)
ans =
1×2 string array
"ab" "cdef"
However, this is awkward and difficult to read.
Is there no ready-made functionality for doing this?
1 件のコメント
dpb
2024 年 10 月 21 日
"Is there no ready-made functionality for doing this?"
Amazingly, no...with everything they did add, the equivalent of MID$, LEFT$, RIGHT$ are not available in a directly-callable functional form.
回答 (2 件)
Stephen23
2023 年 2 月 16 日
編集済み: Stephen23
2024 年 10 月 31 日
str = ["", "ab", "1234", "cdefgh"];
out = regexprep(str,'^(.{1,4}).*?$','$1') % LEFT
out = regexprep(str,'^.*?(.{1,4})$','$1') % RIGHT
or (but note the behavior of the empty string):
out = regexp(str,'^.{1,4}','match','once') % LEFT
out = regexp(str,'.{1,4}$','match','once') % RIGHT
4 件のコメント
dpb
2024 年 10 月 31 日
編集済み: dpb
2024 年 10 月 31 日
@Stephen23, by writing the function names with the $ sign, I was presuming it would be clear the intent was to mimic BASIC (and VBA) which originally required the trailing $ on string variables. Current dialects have dropped the $ convention, of course, but the functionality is retained.
The definition of MID$
res=mid(str,start,[len])
to pick up to len characters from str beginning at start position in str. If omitted, the rest of the original string is returned, in which case it mimics RIGHT$.
It doesn't mean to try to split the string midway so there's no dependency on whether the string length is even/odd nor any ambiguity in the result.
Stephen23
2024 年 10 月 31 日
Perhaps:
str = ["", "ab", "1234", "cdefgh"];
out = regexprep(str,'^.{0,2}(.{0,4}).*$','$1') % MID(START,LEN)
参考
カテゴリ
Help Center および File Exchange で Error Detection and Correction についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!