jedrula.pogo Temat założony przez niniejszego użytkownika |
[C++] Przekazywanie danych z pliku do tabeli na stronie HTML » 2014-12-25 13:52:46 Witam ! Moim zadaniem projektowym jest stworzenie programu, który na podstawie danych osobowych z pliku tekstowego stworzy plik HTML z tabelą. Jestem właśnie na etapie planowania i mam parę pytań. Format danych w pliku tekstowym ma wyglądać następująco: #Imię Nazwisko Urodziny:data Imieniny:data <treść komentarza> [link od zdjęcia] Gdzie hashtag to początek wiersza. Program musi ignorować wielkość liter i wielokrotne użycie znaków białych i ma rozpoznawać trzy formaty dat. rrrr-mm-dd , dd.mm.rrrr , mm/dd/rrrr. na przykład: #Jan Kowalski urodziny:1986-12-01 imieniny: 12-02 <przyjaciel> [\zdjecie.jpg] Moje pomysły to : - Stworzę strukturę tablic by przechowywać pobrane dane (imie , nazwisko itd.), by móc je potem przenieść do etapu zapisu do pliku HTML. - oczywiście użyję fstreama , sprawdzę czy plik jest poprawnie otwarty... - zadeklaruję licznik, który będzie określał ile osób zostało odnalezionych w pliku tekstowym - użycie metody find do odnalezienia imion , nazwisk , urodzin , imienin (http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Wyszukiwanie-frazy-w-tekscie/352) - pobieranie danych wierszami getline() Nie wiem czy moje rozumowanie jest choć trochę poprawne. Z utworzeniem pliku HTML z tabelą nie będzie problemu, bo zapis chyba będzie po prostu polegał na dodaniu pętli, która będzie dodawać kolejne wiersze z danymi. Nie wiem jak rozwiązać problem z rozpoznawaniem dat, ignorowaniem wielkości liter i wielokrotnego użycia znaków białych. Czy jest coś czego nie uwzględniłem, a powinienem ? Liczę na porady. Wesołych Świąt. |
|
Monika90 |
» 2014-12-25 14:35:42 - Stworzę strukturę tablic by przechowywać pobrane dane (imie , nazwisko itd.), by móc je potem przenieść do etapu zapisu do pliku HTML. |
Po co, chyba można generować wyjście na bieżąco podczas wczytywania pliku? - zadeklaruję licznik, który będzie określał ile osób zostało odnalezionych w pliku tekstowym |
A po co Ci licznik? - użycie metody find do odnalezienia imion |
Czy to potrzebne? Kolejność pól jest ustalona i zawsze taka sama. - pobieranie danych wierszami getline() |
Można wczytywać pola jedno po drugim. ma rozpoznawać trzy formaty dat. rrrr-mm-dd , dd.mm.rrrr , mm/dd/rrrr.
|
To proste: char sep1, sep2; int num1, num2, num3; std::cin >> num1 >> sep1 >> num2 >> sep2 >> num3; int year, month, day; switch( sep1 ) { case '-': year = num1; month = num2; day = num3; break; case '.': year = num3; month = num2; day = num1; break; case '/': year = num3; month = num1; day = num2; break; }
|
|
jedrula.pogo Temat założony przez niniejszego użytkownika |
» 2014-12-25 22:21:57 No dobra, załóżmy że mój plik tekstowy wygląda tak : # imie: Jan nazwisko: Kowalski urodziny: 1986-12-01 imieniny: 12-02 komentarz: <przyjaciel> [\zdjecie.jpg]
# imie: Michal nazwisko: Pajak urodziny: 1993-03-09 imieniny: 06-03 komentarz: <kolega> [\zdjecie.jpg]
i chciałbym żeby docelowo na wyjściu tabela w pliku html wyglądała tak: < table >
< tr > < th > Zdjecie </ th > < th > Imie </ th > < th > Nazwisko </ th > < th > Urodziny </ th > < th > Imieniny </ th > < th > Komentarz </ th > </ tr > < tr > < td > zdjecie.jpg </ td > < td > Jan </ td > < td > Kowalski </ td > < td > 1986 - 12 - 01 </ td > < td > 12 - 02 </ td > < td > przyjaciel </ td > </ tr > < tr > < td > zdjecie.jpg </ td > < td > Michal </ td > < td > Pajak </ td > < td > 1993 - 03 - 09 </ td > < td > 06 - 03 </ td > < td > kolega </ td > </ tr >
</ table >
Nie potrzeba w tym przypadku licznika ? Nie muszę gdzieś przechowywać tych danych znalezionych w pliku, tylko mogę je od razu przenieść w czasie rzeczywistym na wyjście ? Jeśli tak, to można ktoś podać jakąś wskazówkę jak to ugryźć ? |
|
jedrula.pogo Temat założony przez niniejszego użytkownika |
» 2014-12-26 15:12:32 Czytając z paru źródeł, posiedziałem trochę i wypociłem na razie coś takiego : #include <iostream> #include <fstream> #include <string>
using namespace std;
void format_daty_urodziny( sep1, num1, num2, num3 ) { switch( sep1 ) { case '-': year = num1; month = num2; day = num3; break; case '.': year = num3; month = num2; day = num1; break; case '/': year = num3; month = num1; day = num2; break; } }
void format_daty_imieniny( sep3, num4, num5 ) { switch( sep3 ) { case '-': day = num4; month = num5; break; case '/': day = num4; month = num5l break; } }
bool wczytanie_pliku( string nazwa_pliku ) { ifstream plik; plik.open( nazwa_pliku.c_str() ); if( !plik.good() ) return false; while( true ) { string imie; string nazwisko; char sep1, sep2; char sep3; int num1, num2, num3; int num4, num5; string komentarz; string zdjecie; plik >> imie >> nazwisko >> num1 >> sep1 >> num2 >> sep2 >> num3 >> num4 >> sep3 >> num5 >> komentarz >> zdjecie; if( plik.good() ) { format_daty_urodziny( sep1, num1, num2, num3 ); format_daty_imieniny( sep3, num4, num5 ); ofstream html( "plik_out.html" ), ios::app ) } else break; } return true; }
int main() { int year, month, day; int month2, day2; if( !wczytanie_pliku( "plik_in.txt" ) ) cout << "Niepowodzenie w otwarciu pliku" << endl; return 0; }
Czy to ma sens ? @Monika90 wykorzystałem Twój kod na rozpoznanie formatu daty. Pytanie czy mogę w pętli (w której docelowo wczytuję dane z pliku tekstowego) rozpocząć też zapis (ofstream do pliku HTML)? Nie mam również pojęcia jak omijać takie znaki jak Hashtag# , słowa kluczowe takie jak "urodziny:" i "imieniny:" oraz znaki < > i [ ] , bo potrzebuję przepisać do tabeli tylko tekst, a w tym momencie kod prawdopodobnie pobiera wszystko co jest stringiem , intem itp. |
|
darko202 |
» 2014-12-27 23:34:04 sens u nie ma tworzenie nowych zmiennych przy każdym przejściu pętli while( true ) { string imie; string nazwisko; char sep1, sep2; char sep3; int num1, num2, num3; int num4, num5; string komentarz; string zdjecie; ............................................. }
jeśli otworzysz inny strumień to kto Ci zabroni robić w nim cokolwiek |
|
« 1 » |