Ok....
Here is my latest gambit of string stuff:
jfc_string.h
/*============================================================================
| _________ _______ _______ ______ _______ Jegas, LLC |
| /___ ___// _____/ / _____/ / __ / / _____/ JasonPSage@jegas.com |
| / / / /__ / / ___ / /_/ / / /____ |
| / / / ____/ / / / / / __ / /____ / |
|____/ / / /___ / /__/ / / / / / _____/ / |
/_____/ /______/ /______/ /_/ /_/ /______/ |
| Under the Hood |
==============================================================================
Copyright(c)2008 Jegas, LLC
============================================================================*/
#pragma once
#include "jfc_string.h"
#include <windows.h>
//=============================================================================
class JFC_STRING{
//=============================================================================
void pvt_Init(void);
public:
char *s;char chNull;
LONGLONG uiLength;
JFC_STRING();
JFC_STRING(char *p_szDefaultValue);
~JFC_STRING();
void Clear(void);
void Clear(size_t p_NewLength);// allows making a buffer instantly.
void ConCat(const char *p_char);
void Set(const char *p_char);
char *Get(void);
size_t Length(void);
bool EqualCS(char *p_szCompareThis); // Case Sensitive
bool Equal(char *p_szCompareThis);
void Left( char *p_szGrabFromThis, size_t p_HowMany);
void Right( char *p_szGrabFromThis, size_t p_HowMany);
void Mid(const char *p_szGrabFromThis, size_t p_Start, size_t p_HowMany);
void Reverse(const char *p_szGrabFromThis);
void Reverse(void);
void Upper(const char *p_szGrabFromThis);
void Upper(void);
void Lower(const char *p_szGrabFromThis);
void Lower(void);
LONGLONG IndexOf(const char *p_szSearchFor, size_t p_StartHere, bool p_CaseSensitive=false);
LONGLONG SNRChar(const char p_SearchFor, const char p_ReplaceWith, bool p_CaseSensitive=false);
LONGLONG SNR(const char *p_SearchFor, const char *p_ReplaceWith, bool p_CaseSensitive=false);
};
//=============================================================================
jfc_string.cpp
/*============================================================================
| _________ _______ _______ ______ _______ Jegas, LLC |
| /___ ___// _____/ / _____/ / __ / / _____/ JasonPSage@jegas.com |
| / / / /__ / / ___ / /_/ / / /____ |
| / / / ____/ / / / / / __ / /____ / |
|____/ / / /___ / /__/ / / / / / _____/ / |
/_____/ /______/ /______/ /_/ /_/ /______/ |
| Under the Hood |
==============================================================================
Copyright(c)2008 Jegas, LLC
============================================================================*/
#include "jfc_string.h"
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
//=============================================================================
JFC_STRING::JFC_STRING(){
//=============================================================================
this->pvt_Init();
};
//=============================================================================
//=============================================================================
JFC_STRING::JFC_STRING(char *p_szDefaultValue){
//=============================================================================
this->pvt_Init();
this->Set(p_szDefaultValue);
};
//=============================================================================
//=============================================================================
void JFC_STRING::pvt_Init(void){
//=============================================================================
this->s=0;
chNull='\0';
this->Clear();
};
//=============================================================================
//=============================================================================
JFC_STRING::~JFC_STRING(){
//=============================================================================
if(this->s!=0){
delete this->s;
};
};
//=============================================================================
//=============================================================================
void JFC_STRING::Clear(void){
//=============================================================================
if(this->s!=0){
delete this->s;
};
this->uiLength=0;
this->s=new char[(size_t)this->uiLength+1];
this->s[this->uiLength]='\0';
};
//=============================================================================
//=============================================================================
void JFC_STRING::Clear(size_t p_NewLength){
//=============================================================================
if(this->s!=0){
delete this->s;
};
this->uiLength=p_NewLength;
this->s=new char[(size_t)this->uiLength+1];
this->s[this->uiLength]='\0';
size_t i;
for(i=0;i<this->uiLength;i++){
this->s[i]='\0';
};
};
//=============================================================================
//=============================================================================
void JFC_STRING::ConCat(const char *p_char){
//=============================================================================
char *st;
this->uiLength=strlen(p_char)+this->uiLength;
size_t NewLen=(size_t)this->uiLength+1;
st=new char[NewLen];
st[0]=chNull;
strcat_s(st,NewLen,this->s);
strcat_s(st,NewLen,p_char);
delete this->s;
this->s=new char[NewLen];
strcpy_s(this->s,NewLen,st);
delete st;
this->s[this->uiLength]='\0';
};
//=============================================================================
//=============================================================================
void JFC_STRING::Set(const char *p_char){
//=============================================================================
this->Clear();
this->ConCat(p_char);
};
//=============================================================================
//=============================================================================
char *JFC_STRING::Get(void){
//=============================================================================
if(this->s!=0){
return this->s;
}else{
return 0;
};
};
//=============================================================================
//=============================================================================
size_t JFC_STRING::Length(void){
//=============================================================================
return (size_t)this->uiLength;
};
//=============================================================================
//=============================================================================
bool JFC_STRING::EqualCS(char *p_szCompareThis){
//=============================================================================
return (strcmp(this->s,p_szCompareThis)==0);
};
//=============================================================================
//=============================================================================
bool JFC_STRING::Equal(char *p_szCompareThis){
//=============================================================================
return (_strcmpi(this->s,p_szCompareThis)==0);
};
//=============================================================================
//=============================================================================
void JFC_STRING::Left( char *p_szGrabFromThis, size_t p_HowMany){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
JFC_STRING *ts=new JFC_STRING();
ts->Set(p_szGrabFromThis);
this->Clear();
if(p_HowMany>0){
size_t i=0;
char c[2];c[1]=0;
while(i<ts->uiLength && i<p_HowMany){
c[0]=ts->s[i];
this->ConCat(c);
i++;
}
};
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRING::Right( char *p_szGrabFromThis, size_t p_HowMany){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
JFC_STRING *ts=new JFC_STRING();
ts->Set(p_szGrabFromThis);
this->Clear();
if(p_HowMany>0){
LONGLONG i=ts->uiLength-(LONGLONG)p_HowMany;
if(i<0){
this->Set(ts->s);
}else{
char c[2];c[1]=0;
while(i<ts->uiLength){
c[0]=ts->s[i];
this->ConCat(c);
i++;
}
};
};
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRING::Mid(const char *p_szGrabFromThis, size_t p_Start, size_t p_HowMany){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
JFC_STRING *ts=new JFC_STRING();
ts->Set(p_szGrabFromThis);
this->Clear();
if(p_Start>=0){
size_t i=p_Start;
char c[2];c[1]=0;
while(i<ts->uiLength && p_HowMany>0){
c[0]=ts->s[i];
this->ConCat(c);
i++;
p_HowMany--;
}
};
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRING::Reverse(const char *p_szGrabFromThis){
//=============================================================================
JFC_STRING *ts=new JFC_STRING();
ts->Set(p_szGrabFromThis);
this->Set(_strrev(ts->s));
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRING::Reverse(void){
//=============================================================================
JFC_STRING *ts=new JFC_STRING();
ts->Set(_strrev(this->s));
this->Set(ts->s);
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRING::Upper(const char *p_szGrabFromThis){
//=============================================================================
this->Set(p_szGrabFromThis);
this->Upper();
};
//=============================================================================
//=============================================================================
void JFC_STRING::Upper(void){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
for(size_t i=0;i<this->uiLength;i++){
this->s[i]=(char)toupper(this->s[i]);
};
};
//=============================================================================
//=============================================================================
void JFC_STRING::Lower(const char *p_szGrabFromThis){
//=============================================================================
this->Set(p_szGrabFromThis);
this->Lower();
};
//=============================================================================
//=============================================================================
void JFC_STRING::Lower(void){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
for(size_t i=0;i<this->uiLength;i++){
this->s[i]=(char)tolower(this->s[i]);
};
};
//=============================================================================
//=============================================================================
LONGLONG JFC_STRING::IndexOf(const char *p_szSearchFor, size_t p_StartHere, bool p_CaseSensitive){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
JFC_STRING *ts=new JFC_STRING();
ts->Set(p_szSearchFor);
bool bGotIt=false;
LONGLONG Index=-1;
if(p_StartHere>=0){
for(Index=p_StartHere;Index<this->uiLength;Index++){
bGotIt=true;
LONGLONG i=0;LONGLONG p=0;
for(i=Index;i<this->uiLength && p<ts->uiLength;i++){
if(p_CaseSensitive){
if(this->s[i]!=ts->s[p]){
bGotIt=false;
i=ts->uiLength;//force next outside loop iteration
break;
};
}else{
//char c1=tolower(this->s[i]);
//char c2=tolower(ts->s[p]);
//if(c1!=c2){
if(tolower(this->s[i])!=tolower(ts->s[p])){
bGotIt=false;
i=ts->uiLength;//force next outside loop iteration
};
};
p++;
};
if(bGotIt){
delete ts;
return Index;
};
};
};
delete ts;
return -1;
};
//=============================================================================
//=============================================================================
LONGLONG JFC_STRING::SNRChar(const char p_SearchFor, const char p_ReplaceWith, bool p_CaseSensitive){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
LONGLONG Index=-1;
LONGLONG LastIndex=-1;
LONGLONG Changes=0;
char c[2];c[0]=p_SearchFor;c[1]=0;
do{
if(Index>-1){
this->s[Index]=p_ReplaceWith;
Changes+=1;
};
LastIndex=Index;
Index=this->IndexOf(c,0,p_CaseSensitive);
}while(LastIndex!=Index);
return Changes;
};
//=============================================================================
//=============================================================================
LONGLONG JFC_STRING::SNR(const char *p_SearchFor, const char *p_ReplaceWith, bool p_CaseSensitive){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
LONGLONG Index=-1;
LONGLONG LastIndex=-1;
JFC_STRING *ts=new JFC_STRING();
JFC_STRING *so=new JFC_STRING(this->s);
LONGLONG Changes=0;
do{
if(Index>-1){
this->Mid(so->s,0,(size_t)Index);
ts->Set(this->s);
size_t Len=strlen(p_SearchFor);
size_t cutend=(size_t)(Index+Len);
this->Mid(so->s,cutend,(size_t)so->uiLength);
ts->ConCat(p_ReplaceWith);
ts->ConCat(this->s);
so->Set(ts->s);
Changes+=1;
};
LastIndex=Index;
Index=so->IndexOf(p_SearchFor,0,p_CaseSensitive);
}while(LastIndex!=Index);
this->Set(so->s);
delete so;
delete ts;
return Changes;
};
//=============================================================================
And for the Unicode stuff...
jfc_stringw.h
/*============================================================================
| _________ _______ _______ ______ _______ Jegas, LLC |
| /___ ___// _____/ / _____/ / __ / / _____/ JasonPSage@jegas.com |
| / / / /__ / / ___ / /_/ / / /____ |
| / / / ____/ / / / / / __ / /____ / |
|____/ / / /___ / /__/ / / / / / _____/ / |
/_____/ /______/ /______/ /_/ /_/ /______/ |
| Under the Hood |
==============================================================================
Copyright(c)2008 Jegas, LLC
============================================================================*/
#pragma once
#include <windows.h>
#include "jfc_string.h"
//=============================================================================
class JFC_STRINGW{
//=============================================================================
void pvt_Init(void);
public:
wchar_t *s;wchar_t chNull;
LONGLONG uiLength;
JFC_STRINGW();
JFC_STRINGW(wchar_t *p_wszDefaultValue);
~JFC_STRINGW();
void Clear(void);
void Clear(size_t p_NewLength);// allows making a buffer instantly.
void ConCat(const wchar_t *p_wchar);
void ConCat(const char *p_char);
void Set(const wchar_t *p_wchar);
void Set(const char *p_char);
wchar_t *Get(void);
size_t Length(void);
bool EqualCS(wchar_t *p_wszCompareThis); // Case Sensitive
bool Equal(wchar_t *p_wszCompareThis);
void Left( wchar_t *p_wszGrabFromThis, size_t p_HowMany);
void Right( wchar_t *p_wszGrabFromThis, size_t p_HowMany);
void Mid(const wchar_t *p_wszGrabFromThis, size_t p_Start, size_t p_HowMany);
void Reverse(const wchar_t *p_wszGrabFromThis);
void Reverse(void);
void Upper(const wchar_t *p_wszGrabFromThis);
void Upper(void);
void Lower(const wchar_t *p_wszGrabFromThis);
void Lower(void);
// Not Implemented Yet
LONGLONG IndexOf(const wchar_t *p_wszSearchFor, size_t p_StartHere, bool p_CaseSensitive=false);
LONGLONG SNRChar(const wchar_t p_wszSearchFor, const wchar_t p_wszReplaceWith, bool p_CaseSensitive=false);
LONGLONG SNR(const wchar_t *p_wszSearchFor, const wchar_t *p_wszReplaceWith, bool p_CaseSensitive=false);
};
//=============================================================================
jfc_stringw.cpp
/*============================================================================
| _________ _______ _______ ______ _______ Jegas, LLC |
| /___ ___// _____/ / _____/ / __ / / _____/ JasonPSage@jegas.com |
| / / / /__ / / ___ / /_/ / / /____ |
| / / / ____/ / / / / / __ / /____ / |
|____/ / / /___ / /__/ / / / / / _____/ / |
/_____/ /______/ /______/ /_/ /_/ /______/ |
| Under the Hood |
==============================================================================
Copyright(c)2008 Jegas, LLC
============================================================================*/
#include "jfc_stringw.h"
#include "jfc_string.h"
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
//=============================================================================
JFC_STRINGW::JFC_STRINGW(){
//=============================================================================
this->pvt_Init();
};
//=============================================================================
//=============================================================================
JFC_STRINGW::JFC_STRINGW(wchar_t *p_wszDefaultValue){
//=============================================================================
this->pvt_Init();
this->Set(p_wszDefaultValue);
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::pvt_Init(void){
//=============================================================================
this->s=0;
chNull='\0';
this->Clear();
};
//=============================================================================
//=============================================================================
JFC_STRINGW::~JFC_STRINGW(){
//=============================================================================
if(this->s!=0){
delete this->s;
};
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Clear(void){
//=============================================================================
if(this->s!=0){
delete this->s;
};
this->uiLength=0;
this->s=new wchar_t[(size_t)this->uiLength+1];
this->s[this->uiLength]='\0';
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Clear(size_t p_NewLength){
//=============================================================================
if(this->s!=0){
delete this->s;
};
this->uiLength=p_NewLength;
this->s=new wchar_t[(size_t)(this->uiLength+1)];
this->s[this->uiLength]='\0';
LONGLONG i;
for(i=0;i<(LONGLONG)this->uiLength;i++){
this->s[i]='\0';
};
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::ConCat(const char *p_char){
//=============================================================================
JFC_STRING *s=new JFC_STRING();
s->Set(p_char);
if(s->uiLength>0){
size_t wlen=(s->uiLength+1) * 2;// I kept getting error without the * 2
wchar_t *w = new wchar_t[wlen];
for(LONGLONG i=0;i<s->uiLength;i++){
w[i]=s->s[i];
};
w[s->uiLength+1]=0;
this->ConCat(w);
delete w;
};
delete s;
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::ConCat(const wchar_t *p_wchar){
//=============================================================================
wchar_t *st;
this->uiLength=(size_t)(wcslen(p_wchar)+this->uiLength);
size_t NewLen=(size_t)(this->uiLength+1);
st=new wchar_t[NewLen];
st[0]=chNull;
wcscat_s(st,NewLen,this->s);
wcscat_s(st,NewLen,p_wchar);
delete this->s;
this->s=new wchar_t[NewLen];
wcscpy_s(this->s,NewLen,st);
delete st;
this->s[this->uiLength]='\0';
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Set(const wchar_t *p_wchar){
//=============================================================================
this->Clear();
this->ConCat(p_wchar);
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Set(const char *p_char){
//=============================================================================
this->Clear();
this->ConCat(p_char);
};
//=============================================================================
//=============================================================================
wchar_t *JFC_STRINGW::Get(void){
//=============================================================================
if(this->s!=NULL){
return this->s;
}else{
return NULL;
};
};
//=============================================================================
//=============================================================================
size_t JFC_STRINGW::Length(void){
//=============================================================================
return (size_t)this->uiLength;
};
//=============================================================================
//=============================================================================
bool JFC_STRINGW::EqualCS(wchar_t *p_wszCompareThis){
//=============================================================================
return (wcscmp(this->s,p_wszCompareThis)==NULL);
};
//=============================================================================
//=============================================================================
bool JFC_STRINGW::Equal(wchar_t *p_wszCompareThis){
//=============================================================================
return (_wcsicmp(this->s,p_wszCompareThis)==NULL);
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Left( wchar_t *p_wszGrabFromThis, size_t p_HowMany){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
JFC_STRINGW *ts=new JFC_STRINGW();
ts->Set(p_wszGrabFromThis);
this->Clear();
if(p_HowMany>0){
size_t i=0;
wchar_t c[2];c[1]=0;
while(i<ts->uiLength && i<p_HowMany){
c[0]=ts->s[i];
this->ConCat(c);
i++;
}
};
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Right( wchar_t *p_wszGrabFromThis, size_t p_HowMany){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
JFC_STRINGW *ts=new JFC_STRINGW();
ts->Set(p_wszGrabFromThis);
this->Clear();
if(p_HowMany>0){
LONGLONG i=ts->uiLength-p_HowMany;
if(i<0){
this->Set(ts->s);
}else{
wchar_t c[2];c[1]=0;
while(i<ts->uiLength){
c[0]=ts->s[i];
this->ConCat(c);
i++;
}
};
};
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Mid(const wchar_t *p_wszGrabFromThis, size_t p_Start, size_t p_HowMany){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
JFC_STRINGW *ts=new JFC_STRINGW();
ts->Set(p_wszGrabFromThis);
this->Clear();
if(p_Start>=0){
size_t i=p_Start;
wchar_t c[2];c[1]=0;
while(i<ts->uiLength && p_HowMany>0){
c[0]=ts->s[i];
this->ConCat(c);
i++;
p_HowMany--;
}
};
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Reverse(const wchar_t *p_wszGrabFromThis){
//=============================================================================
JFC_STRINGW *ts=new JFC_STRINGW();
ts->Set(p_wszGrabFromThis);
this->Set(_wcsrev(ts->s));
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Reverse(void){
//=============================================================================
JFC_STRINGW *ts=new JFC_STRINGW();
ts->Set(_wcsrev(this->s));
this->Set(ts->s);
delete ts;
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Upper(const wchar_t *p_wszGrabFromThis){
//=============================================================================
this->Set(p_wszGrabFromThis);
this->Upper();
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Upper(void){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
for(size_t i=0;i<this->uiLength;i++){
this->s[i]=(wchar_t)toupper(this->s[i]);
};
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Lower(const wchar_t *p_wszGrabFromThis){
//=============================================================================
this->Set(p_wszGrabFromThis);
this->Lower();
};
//=============================================================================
//=============================================================================
void JFC_STRINGW::Lower(void){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
for(size_t i=0;i<this->uiLength;i++){
this->s[i]=(wchar_t)tolower(this->s[i]);
};
};
//=============================================================================
//=============================================================================
LONGLONG JFC_STRINGW::IndexOf(const wchar_t *p_wszSearchFor, size_t p_StartHere, bool p_CaseSensitive){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
JFC_STRINGW *ts=new JFC_STRINGW();
ts->Set(p_wszSearchFor);
bool bGotIt=false;
LONGLONG Index=-1;
if(p_StartHere>=0){
for(Index=p_StartHere;Index<this->uiLength;Index++){
bGotIt=true;
LONGLONG i=0;LONGLONG p=0;
for(i=Index;i<this->uiLength && p<ts->uiLength;i++){
if(p_CaseSensitive){
if(this->s[i]!=ts->s[p]){
bGotIt=false;
i=ts->uiLength;//force next outside loop iteration
break;
};
}else{
//char c1=tolower(this->s[i]);
//char c2=tolower(ts->s[p]);
//if(c1!=c2){
if(tolower(this->s[i])!=tolower(ts->s[p])){
bGotIt=false;
i=ts->uiLength;//force next outside loop iteration
};
};
p++;
};
if(bGotIt){
delete ts;
return Index;
};
};
};
delete ts;
return -1;
};
//=============================================================================
//=============================================================================
LONGLONG JFC_STRINGW::SNRChar(const wchar_t p_wszSearchFor, const wchar_t p_wszReplaceWith, bool p_CaseSensitive){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
LONGLONG Index=-1;
LONGLONG LastIndex=-1;
LONGLONG Changes=0;
wchar_t c[2];c[0]=p_wszSearchFor;c[1]=0;
do{
if(Index>-1){
this->s[Index]=p_wszReplaceWith;
Changes+=1;
};
LastIndex=Index;
Index=this->IndexOf(c,0,p_CaseSensitive);
}while(LastIndex!=Index);
return Changes;
};
//=============================================================================
//=============================================================================
LONGLONG JFC_STRINGW::SNR(const wchar_t *p_wszSearchFor, const wchar_t *p_wszReplaceWith, bool p_CaseSensitive){
//=============================================================================
// TODO: Optimize this - I needed functionality and just cranked out a
// function to do it.
LONGLONG Index=-1;
LONGLONG LastIndex=-1;
JFC_STRINGW *ts=new JFC_STRINGW();
JFC_STRINGW *so=new JFC_STRINGW(this->s);
LONGLONG Changes=0;
do{
if(Index>-1){
this->Mid(so->s,0,(size_t)Index);
ts->Set(this->s);
LONGLONG Len=wcslen(p_wszSearchFor);
LONGLONG cutend=Index+Len;
this->Mid(so->s,(size_t)cutend,(size_t)so->uiLength);
ts->ConCat(p_wszReplaceWith);
ts->ConCat(this->s);
so->Set(ts->s);
Changes+=1;
};
LastIndex=Index;
Index=so->IndexOf(p_wszSearchFor,0,p_CaseSensitive);
}while(LastIndex!=Index);
this->Set(so->s);
delete so;
delete ts;
return Changes;
};
//=============================================================================
Hope this helps
--Jason