예제 #1
0
wxArrayString VcImporter::SplitString(const wxString& s)
{
    wxArrayString arr;
    wxString s1(s);
    s1.Replace(wxT(","), wxT(";"));
    wxStringTokenizer tk1(s1, wxT(";"));
    while(tk1.HasMoreTokens()) {
        arr.Add(tk1.NextToken());
    }
    return arr;
}
예제 #2
0
bool PositionParser::FindSeparator(const wxString & src)
{ 

    // Used when format is similar to "12 34.56 N 12 34.56 E"
    wxString posPartOfSeparator = _T("");

    // First the XML case:
    // Generalized XML tag format, accepts anything like <XXX yyy="<lat>" zzz="<lon>" >
    // GPX format <wpt lat="<lat>" lon="<lon>" /> tag among others.

    wxRegEx regex;

    int re_compile_flags = wxRE_ICASE;
#ifdef wxHAS_REGEX_ADVANCED
    re_compile_flags |= wxRE_ADVANCED;
#endif

    regex.Compile(
            _T( "<[a-z,A-Z]*\\s*[a-z,A-Z]*=\"([0-9,.]*)\"\\s*[a-z,A-Z]*=\"([-,0-9,.]*)\"\\s*/*>" ),
                  re_compile_flags );

    if( regex.IsValid() ) {
        if( regex.Matches( src ) ) {
			int n = regex.GetMatchCount();
            latitudeString = regex.GetMatch( src, 1 );
            longitudeString = regex.GetMatch( src, 2 );
            latitudeString.Trim( true );
            latitudeString.Trim( false );
            longitudeString.Trim( true );
            longitudeString.Trim( false );
            return true;
        }
    }

    // Now try various separators.

    separator = _T(", ");
    wxStringTokenizer tk1(src, separator);
    if (tk1.CountTokens() == 2) {
        latitudeString = tk1.GetNextToken();
        latitudeString.Trim(true);
        latitudeString.Trim(false);
        longitudeString = tk1.GetNextToken();
        longitudeString.Trim(true);
        longitudeString.Trim(false);

        return true;
    }

    separator = _T(",");
    wxStringTokenizer tk2 (src, separator);
    if (tk2.CountTokens() == 2) {
        latitudeString = tk2.GetNextToken();
        latitudeString.Trim(true);
        latitudeString.Trim(false);
        longitudeString = tk2.GetNextToken();
        longitudeString.Trim(true);
        longitudeString.Trim(false);

        return true;
    }   

    separator = _T(" ");
    wxStringTokenizer tk3(src, separator);
    if (tk3.CountTokens() == 2) {
        latitudeString = tk3.GetNextToken();
        latitudeString.Trim(true);
        latitudeString.Trim(false);
        longitudeString = tk3.GetNextToken();
        longitudeString.Trim(true);
        longitudeString.Trim(false);

        return true;
    }
    
    separator = _T("\t");
    wxStringTokenizer tk4(src, separator);
    if (tk4.CountTokens() == 2) {
        latitudeString = tk4.GetNextToken();
        latitudeString.Trim(true);
        latitudeString.Trim(false);
        longitudeString = tk4.GetNextToken();
        longitudeString.Trim(true);
        longitudeString.Trim(false);

        return true;
    }
   
    separator = _T("\n");
    wxStringTokenizer tk5(src, separator);
    if (tk5.CountTokens() == 2) {
        latitudeString = tk5.GetNextToken();
        latitudeString.Trim(true);
        latitudeString.Trim(false);
        longitudeString = tk5.GetNextToken();
        longitudeString.Trim(true);
        longitudeString.Trim(false);

        return true;
    }
  
    separator = _T("N");   
    posPartOfSeparator = _T("N");
    wxStringTokenizer tk6(src, separator);
    if (tk6.CountTokens() == 2) {
        latitudeString = tk6.GetNextToken() << posPartOfSeparator;
        latitudeString.Trim(true);
        latitudeString.Trim(false);
        longitudeString = tk6.GetNextToken();
        longitudeString.Trim(true);
        longitudeString.Trim(false);

        return true;
    }
   
    separator = _T("S");   
    posPartOfSeparator = _T("S");
    wxStringTokenizer tk7(src, separator);
    if (tk7.CountTokens() == 2) {
        latitudeString = tk7.GetNextToken() << posPartOfSeparator;
        latitudeString.Trim(true);
        latitudeString.Trim(false);
        longitudeString = tk7.GetNextToken();
        longitudeString.Trim(true);
        longitudeString.Trim(false);

        return true;
    }   

    // Give up.
    return false;
}