遍历多个子串实例的字符串 – freepascal或delphi
发布时间:2020-12-15 09:25:29 所属栏目:大数据 来源:网络整理
导读:平台:Lazarus 1.1,FreePascal 2.7.1,Win 7 32位. 我有一个字符串值如下: FileName[12345][45678][6789].jpg 默认情况下(假设这是默认行为0),我的程序当前从最后一对方括号中取出最后一组数字到文件名的最右边,即6789.它使用以下代码: if chkbxOverrideUni
平台:Lazarus 1.1,FreePascal 2.7.1,Win 7 32位.
我有一个字符串值如下: FileName[12345][45678][6789].jpg 默认情况下(假设这是默认行为0),我的程序当前从最后一对方括号中取出最后一组数字到文件名的最右边,即6789.它使用以下代码: if chkbxOverrideUniqueID.Checked then IDOverrideValue := StrToInt(edtToggleValue.Text); // User is happy to find the right most unique ID if not chkbxOverrideUniqueID.Checked then LastSquareBracket := RPos(']',strFileName); PreceedingSquareBracket := RPosEx('[',strFileName,LastSquareBracket) + 1; strFileID := AnsiMidStr(strFileName,PreceedingSquareBracket,LastSquareBracket - PreceedingSquareBracket) else // User doesn't want to find the rightmost ID. // and now I am stuck! 但是,我现在为用户添加了一个指定非默认行为的选项.例如,如果他们输入’1′,则表示“从最右边的ID中查找第一个ID”.例如[45678],因为[6789]是默认行为0,请记住.如果他们输入2,我希望它找到[12345]. 我的问题:我如何调整上述代码才能实现这一目标? 解决方法
以下代码将仅返回括号之间的数值:
uses StrUtils; function GetNumber(const Text: string; Index: Integer): string; var I: Integer; OpenPos: Integer; ClosePos: Integer; begin Result := ''; ClosePos := Length(Text) + 1; for I := 0 to Index do begin ClosePos := RPosEx(']',Text,ClosePos - 1); if ClosePos = 0 then Exit; end; OpenPos := RPosEx('[',ClosePos - 1); if OpenPos <> 0 then Result := Copy(Text,OpenPos + 1,ClosePos - OpenPos - 1); end; 如果您想要包含这些括号的值,请将最后一行替换为: Result := Copy(Text,OpenPos,ClosePos - OpenPos + 1); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |