Złożona struktura pliku, wczytanie danych

Złożona struktura pliku, wczytanie danych
0

Witam
Otóż mam dosyć nietypową strukturę pliku - a może i typową.

Kopiuj
3
student
6
(id,Number,1)
(Name,Varchar,0)
(Age,Number,0)
(Salary,Currency,0)
(BirthTime,Time,0)
(BirthDate,Date,0)
3
11,abc,25,25.45,01:12:13 AM,02/01/1988  
12,bcd,29,18.45,13:48:03,13-4-2001
13,def,32,23.928,7:8:9 PM,27.11.1999

No i chciałbym to jakoś zgrabnie wczytać do struktury, dodam, że oprócz tych pół które są teraz widoczne mogę występować też inne, ktoś coś poradzi? Nie oczekuję gotowego kodu, tylko jakiejś podpowiedzi.
Pozdrawiam

Jak na razie nie napisałem za wiele, w sumie nic

Kopiuj
void loadFromFile(std::vector <s> &v, std::string file){
    std::fstream f;
    f.open(file.c_str(), std::ios::in);

    for(auto i: s){

    }

    f.close();
}
spartanPAGE
ad pierwszego parametru, rvo. + nazwa s mówi naprawdę sporo.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Zacznij od sensownej struktury danych reprezentujących to co masz w pliku.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0

No to też w sumie mam, chodzi mi głównie o pomysł na wczytanie tego...

Kopiuj
struct student{
    int id;
    int wiek;
    int czesne;

    std::string nawisko;
    std::string adrres;
    std::string kurs;
    std::string temat;
    std::string profesja;

    time_t datetime;
    student();
};
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Nie, ponieważ: -

Złoty Pomidor napisał(a):

... dodam, że oprócz tych pół które są teraz widoczne mogę występować też inne ...


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
0

Będę tylko te pola które są w strukturze - tylko nie koniecznie wszystkie

kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Łódź
  • Postów:1402
2

Jak dla mnie taki plik jest nieczytelny i narażony na błędy przy wczytywaniu. Minimum to nagłówki z opisem/znacznikiem, co jest w danym polu w pliku, a dobrze by było jeszcze jakaś możliwość sprawdzania poprawności danych. Jak nie masz pomysłu, użyj któregoś z popularnych sposobu zapisu danych: albo tekstowych xml, ini itp, albo binarnych, np iff.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
0

ten plik będzie właśnie taki... sprawdza to sprawdzarka na stronie internetowej, więc ja nie mogę w niego ingerować

0

A może dać jakieś flagi które będą po prostu sprawdzały co będzie w tych danych poniżej - wszystkie możliwe opcje i jak trafi np. będzie, że jest data urodzenia to zmienię ją na 1

0

ktoś coś?

0

te dane jednak są dowolne - to nie musi być wcale student... więc to jeszcze bardziej utrudnia sprawe

T2
  • Rejestracja:ponad 10 lat
  • Ostatnio:8 miesięcy
  • Postów:194
0

Czy masz wpływ na format plku ?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Jak nie podasz pełnej treści zadania to raczej nikt ci nie pomoże.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0

No to podaję... Więc muszę stworzyć bazę CZEGOŚ - nie koniecznie studentów, na drzewie b+ wykonywać takie operacje jak usuń / wstaw / etc. Musi być to zrobione w C++ albo w Python, na dole podaje format plików we/wy, ja mam jakieś tam pojęcie o programowaniu - coś tam wiem, tylko po prostu jestem zszokowany tym plikiem - nie wiem jak go ugryźć.

Kopiuj
#number of tables Table1_name #number of attributes in the Table1_name attribute1_name,attribute2_name,attribute3_name,attribute4_name, ... $ #number of tuples in Table1_name val1,val2,val3,val4, ... $ val1,val2,val3,val4, ... $ val1,val2,val3,val4, ... $ . . . . . . val1, val2, val3, val4, ... $ $ --- end table data Table2_name #number of attributes in the Table2_name attribute1_name,attribute2_name,attribute3_name,attribute4_name, ... $ #number of tuples in Table2_name val1,val2,val3,val4, ... $
val1,val2,val3,val4, ... $ val1,val2,val3,val4, ... $ . . . . . . val1, val2, val3, val4, ... $ $ . . . . . . $# ---end file
Output File Format: #number of attributes in the result attribute1_name,attribute2_name,attribute3_name,attribute4_name, ... $ #number of tuples in result val1,val2,val3,val4, ... $ val1,val2,val3,val4, ... $ val1,val2,val3,val4, ... $ . . . val1, val2, val3, val4, ... $ $ --- end table data
0

eh z pdf tak się skopiowało

Kopiuj
#number of tables
Table1_name
#number of attributes in the Table1_name
attribute1_name,attribute2_name,attribute3_name,attribute4_name, ... $
#number of tuples in Table1_name
val1,val2,val3,val4, ... $
val1,val2,val3,val4, ... $
val1,val2,val3,val4, ... $
. . . . . . 
val1, val2, val3, val4, ... $
$ --- end table data Table2_name
#number of attributes in the Table2_name
attribute1_name,attribute2_name,attribute3_name,attribute4_name, ... $
#number of tuples in Table2_name
val1,val2,val3,val4, ... $
val1,val2,val3,val4, ... $
val1,val2,val3,val4, ... $ .
 .
 . 
. .
 .
 val1, val2, val3, val4, ... $ 
$ . . . . . . $# ---end file
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Więc jak zamierzasz wczytać

Złoty Pomidor napisał(a):

... bazę CZEGOŚ - nie koniecznie studentów ...
do http://4programmers.net/Forum/1222669 ?

Więc raz jeszcze: http://4programmers.net/Forum/1222668

Przy maksymalnym uproszczeniu:

Kopiuj
enum fieldType={ftString,ftInt,ftDouble,...};
class field
  {
   string name;
   fieldType ft;
   ...
   bool isGood(const string &str);
   static fieldType byName(const string &typeName);
  };

class table
  {
   string name;
   vector<field> fields;
   unordered_map<string,size_t> fieldNames;
   ...
  };

class fieldData
  {
   field &fd; // nie wiem czy słusznie
   string data;
   ...
  };

class record
  {
   table &tb; // nie wiem czy słusznie
   vector<fieldData> row;
  };

class dataset
  {
   table &tb;
   vector<record> data;
   ...
  };

owszem da się zrobić znacznie bardziej elegancko ale nie ma co bo i tak nie zrozumiesz (jak na razie).


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 2x, ostatnio: _13th_Dragon
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)