Substituindo parte do texto em uma string
Overview
Quem trabalha com PowerBuilder sabe o desafio que é manipular textos de forma eficiente. Se você já se viu repetindo ações para substituir um texto por outro, tenho boas notícias. Hoje, vamos mergulhar no mundo da função of_GlobalReplace, um tesouro escondido no PowerBuilder que promete simplificar sua vida. Vamos desvendar como essa função, direto do arsenal do PFC, pode substituir todas as ocorrências de um texto específico, com direito a tratar erros e ignorar maiúsculas e minúsculas. Acompanhe!
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.