pekfos |
» 2012-08-23 21:19:27 @Mrovqa: Nie wiem czy nie było by to zbyt skomplikowane dla Autora Tematu :P Ale wyglądało by to tak: jeśli 1. znak to ", to znajdź następny znak " (pomijając \"), a dalej wiadomo co. Da się szukać od określonej pozycji? Jak? |
Znasz podstawy C++? Jakbyś znał, to wpadł byś na pomysł napisania pętli, która by to rozdzielała. (Jakieś 10 linii). Mógłbyś też poszukać w dokumentacji. std::string oferuje kilka funkcji szukających. |
|
bingo009 |
» 2012-08-23 21:20:55 Jak pisałem, najlepiej żebyś pierwsze przelatywał składnie, a jak znajdziesz polecenie, to sprawdzasz jego parametry. |
|
mati1qazxsw2 |
» 2012-08-23 21:21:40 Pętelka for, bufor i stos.Czy to takie trudne pekfos?:p |
|
Mrovqa |
» 2012-08-23 21:43:52 Samo std::string::find przyjmuje w jednym za argumentów od której pozycji szukać ;) Poza tym bufor, pętelka, wskaźnik i też zrobisz ;) |
|
klex234 Temat założony przez niniejszego użytkownika |
» 2012-08-24 15:13:22 Teraz jest ok?: #include <iostream> #include <windows.h> #include <string> #include <conio.h>
using namespace std;
int main() { int a = 1, e; string b, c, d; char tab; while( a == 1 ) { cout << ">"; getline( cin, b ); if( b.find( "exit" ) == 0 ) { if( b.length() > 4 ) { cout << "Procedura Exit nie ma parametrow!" << endl; } else { return 0; } } if( b.find( "echo" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << c << endl; } else { cout << "Blad, za malo argumentow" << endl; } } } }
|
|
Mrovqa |
» 2012-08-24 19:40:04 @up parsera nigdzie nie widzę... btw exit przyjmuje parametr - to co zwraca program, tj. "exit 4" to tak jakby "return 4;" ;) |
|
klex234 Temat założony przez niniejszego użytkownika |
» 2012-08-25 10:24:12 proszę, oto parser: #include <iostream> #include <windows.h> #include <string> #include <sstream> #include <fstream> #include <vector> #include <conio.h>
using namespace std;
int main() { int a = 1, e, f, g, k; string b, c, d, i, l, n; fstream plik; cout << "File localization, Pleas..." << endl; getline( cin, l ); plik.open( l.c_str(), ios::in | ios::out ); if( plik.good() ) { while( !plik.eof() ) { getline( plik, b ); if( b.find( "exit" ) == 0 ) { if( b.length() > 4 ) { cout << "Procedura Exit nie ma parametrow!" << endl; } else { return 0; } } if( b.find( "echo" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << c << endl; } else { cout << "Blad, za malo argumentow" << endl; } } if( b.find( "open" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << "Opening: " << c << endl; ShellExecute( NULL, "open", c.c_str(), NULL, NULL, SW_SHOWNORMAL ); } else { cout << "Blad, za malo argumentow" << endl; } } if( b.find( "//" ) == 0 ) { } if( b.find( "newline" ) == 0 ) { if( b.length() > 7 ) { cout << "Procedura Newline nie ma parametrow!" << endl; } else { cout << endl; } } } while( a == 1 ) { cout << ">"; getline( cin, b ); if( b.find( "exit" ) == 0 ) { if( b.length() > 4 ) { cout << "Procedura Exit nie ma parametrow!" << endl; } else { return 0; } } if( b.find( "echo" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << c << endl; } else { cout << "Blad, za malo argumentow" << endl; } } if( b.find( "open" ) == 0 ) { if( b.length() > 4 ) { e = b.find_first_of( " " ); c = b.substr( e + 1 ); cout << "Opening: " << c << endl; ShellExecute( NULL, "open", c.c_str(), NULL, NULL, SW_SHOWNORMAL ); } else { cout << "Blad, za malo argumentow" << endl; } } if( b.find( "//" ) == 0 ) { } if( b.find( "newline" ) == 0 ) { if( b.length() > 7 ) { cout << "Procedura Newline nie ma parametrow!" << endl; } else { cout << endl; } } } } else { cout << "Blad przy otwieraniu pliku" << endl; } }
Mam jeszcze pytanko: Jak robi się to z otwórz za pomocą? Chodzi o to że ktoś otwiera skrypt przez interpreter a to interpretuje, a nie wpisywać nazwe pliku w interpreterze. |
|
Mrovqa |
» 2012-08-25 14:48:34 Zapraszam do mojego artykułu, tam jest to opisane ;) [Windows, rejestr] Własne rozszerzenie pliku (wiem, że są błędy - bug w pdf readerze; każde 'ć' zamieniało na 'd' przy kopiowaniu :/ - tak samo jest z moim drugim artykułem) Btw nadal twój parser jest bardzo czuły (zbędne białe znaki, dodatkowe parametry, które powinny być ignorowane, wielkość liter, itp), ale nie będę Cię tym zamęczać. Zapewne nie znasz klas... w klasie taki parser lepiej by wyglądał i wygodniej by się go używało ;) |
|
1 2 3 4 « 5 » 6 |