Narzędzia użytkownika

Narzędzia witryny


tokenizer

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
tokenizer [2008/04/12 21:24]
mplacht1
tokenizer [2008/04/14 08:45]
mplacht1
Linia 27: Linia 27:
 using namespace boost; using namespace boost;
  
-string str = "To jest,  ​prosty ​przyklad";​+string str = "To jest,  przyklad";​
  
 int main(){ int main(){
Linia 45: Linia 45:
 To To
 jest jest
-prosty 
 przyklad przyklad
 </​code>​ </​code>​
Linia 99: Linia 98:
   * Type - typ sekwencji\\   * Type - typ sekwencji\\
 \\ \\
-W celu utorzenia iteratora musimy podać iterator wskazujący na początek dzielonej sekwencji ''​begin'', ​interator ​wskazujący dokładnie za dzieloną sekwencję ''​end''​ oraz funkcję podziału sekwencji ''​fun''​.+W celu utorzenia iteratora musimy podać iterator wskazujący na początek dzielonej sekwencji ''​begin'', ​iterator ​wskazujący dokładnie za dzieloną sekwencję ''​end''​ oraz funkcję podziału sekwencji ''​fun''​.
 <code cpp> <code cpp>
 template<​class Type, class Iterator, class TokenizerFunc>​ template<​class Type, class Iterator, class TokenizerFunc>​
Linia 106: Linia 105:
 </​code>​ </​code>​
 \\ \\
-Przykład użycia ​orzy wykorzystaniu funktora ''​offset_separator''​ dzielącego łańcuch znakowy na podciągi o określonej długości.+Przykład użycia ​przy wykorzystaniu funktora ''​offset_separator'' ​(opisanego dalej) ​dzielącego łańcuch znakowy na podciągi o określonej długości.
 <code cpp> <code cpp>
 #​include<​iostream>​ #​include<​iostream>​
Linia 114: Linia 113:
 using namespace std; using namespace std;
 using namespace boost; using namespace boost;
 +
 +string s = "​12252001";​
 +int offsets[] = {2,2,4};
  
 int main(){ int main(){
-   ​string s = "​12252001";​ 
-   int offsets[] = {2,2,4}; 
    ​offset_separator f(offsets, offsets+3);    ​offset_separator f(offsets, offsets+3);
    ​typedef token_iterator_generator<​offset_separator>::​type Iter;    ​typedef token_iterator_generator<​offset_separator>::​type Iter;
Linia 141: Linia 141:
 \\ \\
 Funkcja ''​strtok()''​ po dokonaniu podziału sekwencji nie umieszcza znaków rodzielających poszczególne podciągi. Jednak czasami okazuje się przydatnym posiadanie znaków rozdzielających pojawiających się w wyjściowej sekwencji podciągów,​ dlatego ''​char_separator''​ zapewnia takie rozwiązanie.\\ Funkcja ''​strtok()''​ po dokonaniu podziału sekwencji nie umieszcza znaków rodzielających poszczególne podciągi. Jednak czasami okazuje się przydatnym posiadanie znaków rozdzielających pojawiających się w wyjściowej sekwencji podciągów,​ dlatego ''​char_separator''​ zapewnia takie rozwiązanie.\\
-Kiedy swa znaki rozdzielające znajdują sie w sekwencji jeden za drugim. funkcja ''​strtok()''​ pomija je, natomiast ''​char_separator''​ pozwala również w takiej sytuacji na utworzenie pustego podciągu, w zależności od wyboru.\\ ​+Kiedy dwa znaki rozdzielające znajdują sie w sekwencji jeden za drugim. funkcja ''​strtok()''​ pomija je, natomiast ''​char_separator''​ pozwala również w takiej sytuacji na utworzenie pustego podciągu, w zależności od wyboru.\\ ​
 \\ \\
 Poniższy przykład pokazuje jak zastąpić funkcję ''​strtok()''​ za pomocą ''​char_separator''​. Określone są trzy znaki rozdzielające,​ które nie pojawią się w wyjściowych podciągach,​ puste podciągi będą ignorowane. Poniższy przykład pokazuje jak zastąpić funkcję ''​strtok()''​ za pomocą ''​char_separator''​. Określone są trzy znaki rozdzielające,​ które nie pojawią się w wyjściowych podciągach,​ puste podciągi będą ignorowane.
Linia 200: Linia 200:
 ---- ----
 ==== Klasa escaped_list_separator ==== ==== Klasa escaped_list_separator ====
 +Klasa ''​escaped_list_separator''​ jest jedną z implementacji funktora TokenizerFunction. ''​escaped_list_separator''​ formatuje dane typu ''​csv''​ (''​Comma Separated Values''​ - wartości rozdzielone przecinkiem). Poniższy przykład obrazuje format, w którym użyto domyślnych znaków separatora, cytowania oraz znaku przywracającego znaczenie.
  
 +''​Pole 1,Pole 2,Pole 3''​\\
 +''​Pole 1,"​Pole2,​ z przecinkiem",​Pole3''​\\
 +''​Pole1,​Pole2 z\"​otoczony cytowaniem\",​Pole3''​\\
 +''​Pole1,​ Pole2 z \n nowa linią,​Pole3''​\\
 +''​Pole1,​ Pole2 z otoczonym \\,​Pole3''​\\
 +
 +Pola są domyślnie oddzielane przez przecinki. W celu wstawienia przecinka do pola, należy otoczyć go cytowaniem. Sekwencje trzech znaków przywracających znaczenie są wspierane.
 +\\
 +Przykład użycia:
 +<code cpp>
 +#​include<​iostream>​
 +#​include<​boost/​tokenizer.hpp>​
 +#​include<​string>​
 +
 +using namespace std;
 +using namespace boost;
 +
 +string s = "​Pole1,​\"​wstawianie cytowania dookola pola umozliwia, uzywanie przecinkow\",​Pole3";​
 +
 +int main(){
 +   ​tokenizer<​escaped_list_separator<​char>​ > tok(s);
 +   ​for(tokenizer<​escaped_list_separator<​char>​ >::​iterator beg=tok.begin();​ beg!=tok.end();​++beg){
 +       cout << *beg << "​\n";​
 +   }
 +   ​return 0;
 +}
 +</​code>​
 +Wynikiem działania programu będzie sekwencja: ​
 +<​code>​
 +Pole1
 +wstawianie cytowania dookola pola umozliwia, uzywanie przecinkow
 +Pole3
 +</​code>​
 +\\
 +Klasa ''​escaped_list_separator''​ posiada dwa następujące konstruktory:​
 +<code cpp>
 +explicit escaped_list_separator(Char e = '​\\',​ Char c = ',',​Char q = '​\"'​)
 +</​code>​
 +Parametry konstruktora:​
 +  * e - określa znak, który przywraca pierwotne znaczenie znaku następującego po nim
 +  * c - określa znak używany jako separator
 +  * q - określa znak oznaczający cytowanie
 +\\
 +<code cpp>
 +escaped_list_separator(string_type e, string_type c, string_type q):
 +</​code>​
 +Parametry konstruktora:​
 +  * e - znaki z łańcucha określaja znaki, które przywracają pierwotne znaczenie znaku następującego po nim, pusty łańcuch określa brak takiego znaku
 +  * c - każdy znak z łańcucha określa znak używany jako separator, pusty łańcuch określa brak takiego znaku
 +  * q - znaki z łańcucha określaja znak oznaczający cytowanie, pusty łańcuch określa brak takiego znaku
 +\\
 ---- ----
 ==== Klasa offset_separator ==== ==== Klasa offset_separator ====
-Klasa ''​offset_separator''​ jest jedną z implementacji funktora TokenizerFunction,​ która może być użyta w celu podziału sekwencji na podciągi. ''​offset_separator''​ dzieli sekwencję znaków ''​char''​ na łańcuchy znakowe o określonej długości bazując na zdefiniowanych przesunięciach.\\+Klasa ''​offset_separator''​ jest kolejną z implementacji funktora TokenizerFunction,​ która może być użyta w celu podziału sekwencji na podciągi. ''​offset_separator''​ dzieli sekwencję znaków ''​char''​ na łańcuchy znakowe o określonej długości bazując na zdefiniowanych przesunięciach.\\
 Poniższy przykład dzieli sekwencję "​12252001"​ przy użyciu przesunięc(2,​2,​4) na podciągi 12 25 2001: Poniższy przykład dzieli sekwencję "​12252001"​ przy użyciu przesunięc(2,​2,​4) na podciągi 12 25 2001:
 <code cpp> <code cpp>
tokenizer.txt · ostatnio zmienione: 2008/04/14 08:45 przez mplacht1