A função Replace do PowerBuilder substitui apenas um pedaço do texto, mas não substitui todas as ocorrências do texto A no no texto B. O fonte abaixo mostra como fazer isso.
Como não é bom reinventar a roda, o fonte abaixo foi extraído do PFC.
////////////////////////////////////////////////////////////////////////////// // // Function: of_GlobalReplace // // Access: public // // Arguments: // as_Source The string being searched. // as_Old The old string being replaced. // as_New The new string. // ab_IgnoreCase A boolean stating to ignore case sensitivity. // // Returns: string // as_Source with all occurrences of as_Old replaced with as_New. // If any argument's value is NULL, function returns NULL. // // Description: Replace all occurrences of one string inside another with // a new string. // ////////////////////////////////////////////////////////////////////////////// // // Revision History // // Version // 5.0 Initial version // ////////////////////////////////////////////////////////////////////////////// // /* * Open Source PowerBuilder Foundation Class Libraries * * Copyright (c) 2004-2005, All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted in accordance with the GNU Lesser General * Public License Version 2.1, February 1999 * * http://www.gnu.org/copyleft/lesser.html * * ==================================================================== * * This software consists of voluntary contributions made by many * individuals and was originally based on software copyright (c) * 1996-2004 Sybase, Inc. http://www.sybase.com. For more * information on the Open Source PowerBuilder Foundation Class * Libraries see http://pfc.codexchange.sybase.com */ // ////////////////////////////////////////////////////////////////////////////// Long ll_Start Long ll_OldLen Long ll_NewLen String ls_Source //Check parameters If IsNull(as_source) or IsNull(as_old) or IsNull(as_new) or IsNull(ab_ignorecase) Then string ls_null SetNull(ls_null) Return ls_null End If //Get the string lenghts ll_OldLen = Len(as_Old) ll_NewLen = Len(as_New) //Should function respect case. If ab_ignorecase Then as_old = Lower(as_old) ls_source = Lower(as_source) Else ls_source = as_source End If //Search for the first occurrence of as_Old ll_Start = Pos(ls_Source, as_Old) Do While ll_Start > 0 // replace as_Old with as_New as_Source = Replace(as_Source, ll_Start, ll_OldLen, as_New) //Should function respect case. If ab_ignorecase Then ls_source = Lower(as_source) Else ls_source = as_source End If // find the next occurrence of as_Old ll_Start = Pos(ls_Source, as_Old, (ll_Start + ll_NewLen)) Loop Return as_Source
Ela é um pouco grande, mas realiza tratamentos de erros, além de realizar a substituição de todas as ocorrências do texto A no texto B.
The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022
Pingback: Utilizando expressões regulares para substituir strings no PowerBuilder – Raccoon Ninja