Home | Develop | Download | Contact
RaString.hpp
1/*
2 * RaString.hpp
3 *
4 * Copyright 2018 Fernando Pujaico Rivera <fernando.pujaico.rivera@gmail.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19 * MA 02110-1301, USA.
20 *
21 */
22
30#ifndef __PDS_RASTRING_HPP__
31#define __PDS_RASTRING_HPP__
32
33#include <string>
34#include <list>
35#include <Pds/Grid>
36#include <vector>
37
38
48namespace Pds{
49
53namespace Ra{
54
58namespace Sort{
59
75 {
76 // cstr1 < cstr2
77 // constexpr // enable only in c++14
78 // https://en.cppreference.com/w/cpp/utility/functional/less
79 bool operator()(const std::string &cstr1,const std::string &cstr2) const
80 {
81 unsigned int id1=0;
82 unsigned int id2=0;
83 unsigned int N1=cstr1.size();
84 unsigned int N2=cstr2.size();
85
86 std::string s1="";
87 std::string s2="";
88
89 id1=0;id2=0;
90
91 while((id1<N1)&&(id2<N2))
92 {
93 // Si es un número
94 if( (isdigit(cstr1[id1])!=0)&&(isdigit(cstr2[id2])!=0) )
95 {
96 s1="";
97 s2="";
98
99 while( isdigit(cstr1[id1])!=0 ) { s1=s1+cstr1[id1]; id1++; }
100 while( isdigit(cstr2[id2])!=0 ) { s2=s2+cstr2[id2]; id2++; }
101
102 if(atoi(s1.c_str())<atoi(s2.c_str())) return true;
103 if(atoi(s1.c_str())>atoi(s2.c_str())) return false;
104 }
105 else
106 {
107 if( cstr1[id1]<cstr2[id2] ) return true;
108 if( cstr1[id1]>cstr2[id2] ) return false;
109
110 id1++;
111 id2++;
112 }
113
114 }
115
116 if(N1<N2) return true;
117 else return false;
118 }
119 };
123}// Sort
124
152 std::vector<std::string> SubsInString(const std::string &str,char DelL,char DelR);
153
176 std::vector<std::string> SubsInString( const std::string &str,
177 const std::string &DelL,
178 const std::string &DelR,
179 bool Full=false);
180
199 std::string FirstSubInString( const std::string &str,
200 const std::string &DelL,
201 const std::string &DelR,
202 bool Full=false);
203
224 std::vector<unsigned long int> FirstSubIdsInString( const std::string &str,
225 const std::string &DelL,
226 const std::string &DelR,
227 bool Full=false);
228
251 std::vector<std::string> SubsXmlInString( const std::string &str,
252 bool Full,
253 std::vector<std::string> &Tag);
254
269 bool IsInteger(const std::string& str);
270
277 bool IsReal(const std::string& str);
278
315 int ElementsInString(const std::string &str);
316
317
352 bool ArraySizeInString(std::string str,unsigned int &Nlin,unsigned int &Ncol);
353
387 std::list<std::string> ListSplitString(std::string str, std::string delimeters);
388
411 std::vector<std::string> VectorSplitString(std::string str, std::string delimeters);
412
435 std::vector<std::string> VectorSplitString(std::string str, std::string delimiter,bool include_void);
436
463 std::vector<std::string> SplitSingleTagAndData(const std::string &str, char wrap, char Eq);
464
494 std::vector<std::string> SplitMultipleTagAndSeparator(const std::string &str, char wrap, char sep, char dc);
495
524 std::vector<std::string> SplitMultipleObjectsAndSeparator( const std::string &str,
525 char DelL,
526 char DelR,
527 char sep);
557 bool NaturalCompare(const std::string &str1,const std::string &str2);
558
591 bool IsSpacesString(const std::string &str);
592
619 std::string Trim(const std::string &str);
620
621
636 std::string ToLower(const std::string &str);
637
667 int CiCompare(const std::string &str1,const std::string &str2);
668
683 std::string Repeat(const std::string &str,unsigned int N);
684
700 std::string ReplaceAll(std::string str, const std::string& from, const std::string& to);
701
715 template <typename T>
716 extern std::string ToString(T val);
717
745 bool SaveString(const std::string &filepath, const std::string &str);
746
765 bool LoadString(const std::string &filepath, std::string &str);
766
767
796 bool SaveVectorString(const std::string &filepath, const std::vector<std::string> &str);
797
798
817 bool PrintVectorString(const std::vector<std::string> &str);
818
837 bool PrintVectorString( const std::vector<std::string> &str,
838 std::string delim_elem,
839 std::string delim_end);
840
841
860 std::string delim_elem,
861 std::string delim_end);
862
863
887 std::string ExportOctaveCellString(const std::vector<std::string> &X,const std::string &pname);
894} // namespace Ra
895} // namespace Pds
896
897
902#endif /* __PDS_RASTRING_HPP__ */
std::vector< std::string > VectorSplitString(std::string str, std::string delimeters)
Retorna un vector con los elementos en la cadena. Internamente usa la funcion isspace().
std::string ExportOctaveCellString(const std::vector< std::string > &X, const std::string &pname)
Exporta un std::vector<std::string> a una cadena en formato de código m.
std::string Trim(const std::string &str)
Esta función retorna una cadena que elimina al inicio y al final algunos caracteres si estos son cara...
std::vector< std::string > SplitMultipleTagAndSeparator(const std::string &str, char wrap, char sep, char dc)
Dado un caracter wrap y un caracter separador, retorna un vector con varios elementos (tags)....
std::vector< std::string > SubsInString(const std::string &str, char DelL, char DelR)
Retorna todas las cadenas de texto dentro de un par de delimitadores.
std::string Repeat(const std::string &str, unsigned int N)
Repite N veces una cadena de tipo std::string.
std::list< std::string > ListSplitString(std::string str, std::string delimeters)
Retorna una lista con los elementos en la cadena. Internamente usa la funcion isspace().
bool IsSpacesString(const std::string &str)
Esta función comprueba si los caracteres en la cadena son caracteres no visibles (white-spaces)....
std::vector< std::string > SplitMultipleObjectsAndSeparator(const std::string &str, char DelL, char DelR, char sep)
Dado un par de caracteres y un caracter separador, retorna un vector con varios objetos....
std::string FirstSubInString(const std::string &str, const std::string &DelL, const std::string &DelR, bool Full=false)
Retorna la primera cadena de texto dentro de un par de delimitadores.
std::vector< std::string > SubsXmlInString(const std::string &str, bool Full, std::vector< std::string > &Tag)
Busca etiquetas tag entre '<' y '>' de modo de que se busca la forma <tag> dato </tag>....
bool IsReal(const std::string &str)
Retorna true si es un real (double) o false si no.
std::string ReplaceAll(std::string str, const std::string &from, const std::string &to)
Remplaza todas las cadenas desde from a to.
std::vector< std::string > SplitSingleTagAndData(const std::string &str, char wrap, char Eq)
Dado un caracter wrap y un caracter separador, retorna un vector con dos elementos el tag y el dato....
int CiCompare(const std::string &str1, const std::string &str2)
Case-insensitive compare. Retorna 0 si las cadenas son iguales o un numero diferente de 0 si no.
bool NaturalCompare(const std::string &str1, const std::string &str2)
Esta función compara las cadenas str1 y str2 de forma natural (tomando en cuenta números).
bool ArraySizeInString(std::string str, unsigned int &Nlin, unsigned int &Ncol)
Retorna el número de lineas significativas y columnas de un archivo. Se asume que es un archivo de te...
std::vector< unsigned long int > FirstSubIdsInString(const std::string &str, const std::string &DelL, const std::string &DelR, bool Full=false)
Retorna la {posición, longitud} de la primera cadena de texto dentro de un par de delimitadores.
bool SaveString(const std::string &filepath, const std::string &str)
Save the string in a text file.
int ElementsInString(const std::string &str)
Retorna el número de elementos en la cadena. Internamente usa la funcion isspace().
std::string ToLower(const std::string &str)
Crea una nueva cadena con datos lower case.
bool PrintGridString(const Pds::Grid< std::string > &str, std::string delim_elem, std::string delim_end)
Print each string of a Pds::Grid<std::string> in a text file.
std::string ToString(T val)
Convierte en std::sring un int,long,unsigned int, unsigned long, float o double.
bool IsInteger(const std::string &str)
Retorna true si es un entero (positivo o negativo) o false si no.
bool PrintVectorString(const std::vector< std::string > &str)
Print each string of a vector string in a new line in a text file.
bool SaveVectorString(const std::string &filepath, const std::vector< std::string > &str)
Save each string of a vector string in a new line in a text file.
bool LoadString(const std::string &filepath, std::string &str)
Load the string in a text file.
Nombre de espacio para Pds (Procesamiento Digital de Senales)
Definition: AbstractRV.hpp:42
Es una estructura para ordenar de forma "natural" datos std::string, es usada en los siguientes casos...
Definition: RaString.hpp:75
bool operator()(const std::string &cstr1, const std::string &cstr2) const
Definition: RaString.hpp:79

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed