CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Szybki parser CSV

Szybki parser CSV

dział ogólny

Re: Szybki parser CSV

Nowy postprzez Corvis » środa, 29 grudnia 2010, 16:15

polymorphism z czystej ciekawości mam pytanie ten kod:

KOD cpp:     UKRYJ  
ng.get(p3,p1,file,err,v);


odczytuje mi wartość double do v. Jeżeli będę chciał odczytać jakiegoś stringa tzn jakiś napis np "blabalba" to już ten typ funkcji nie zadziała na to.
szukałem czy nie ma jakiegoś przeładowania tej funkcji - tak żeby odczytać string albo char* ale nie znalazłem.

http://msdn.microsoft.com/en-us/library/5t4a071x.aspx

Nie wiem tylko co to jest:

Kod: Zaznacz cały
void *& _Val
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Szybki parser CSV

Nowy postprzez polymorphism » środa, 29 grudnia 2010, 18:57

Przecież get to metoda klasy num_get, która to służy do konwersji tekstu na liczbę. Zatem jeśli nie interesuje Cię taka konwersja, klasa ta nie jest Ci do niczego potrzebna.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Szybki parser CSV

Nowy postprzez Corvis » środa, 29 grudnia 2010, 20:21

faktycznie doszedłem do tego, miałem problem bo cell_text nie zerowałem na początku i jakieś śmieci mi się odczytywały. Sorry
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: Szybki parser CSV

Nowy postprzez Corvis » wtorek, 9 października 2012, 21:49

polymorphism mam pytanie, wiesz może dlaczego metoda: ng.get(p3,p1,file,err,v); zwraca na Windows 7 dobrze liczbę zmiennoprzecinkową a na Windows Xp ucikana wszystko po przecinku ??? Czyli na Windows 7 otrzymuję np. 1.783345 a na Windows Xp otrzymuję 1
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Szybki parser CSV

Nowy postprzez polymorphism » wtorek, 9 października 2012, 22:28

A ustawiłeś odpowiednio locale? Jeśli przecinkiem dziesiętnym jest kropka, to ustawienie regionalne dla liczb nie może być polskie, bo u nas jest przecinek.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Szybki parser CSV

Nowy postprzez Corvis » środa, 10 października 2012, 06:57

KOD cpp:     UKRYJ  
std::ifstream file;
file.imbue(std::locale("."));
file.open(PlikNotowan.c_str());
WczytanoDane = false;
 


Próbowałem z "." i "" oraz z "," ale z przecinkiem wywala mi Access Violation
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Szybki parser CSV

Nowy postprzez polymorphism » środa, 10 października 2012, 11:12

Corvis, no proszę Cię :D Zajrzałeś w ogóle do dokumentacji klasy locale, czy w swej naiwności założyłeś, że jeśli sobie coś tam wpiszesz, to klasa sama domyśli się, o co Tobie chodzi?

Tu masz podany format łańcucha, który masz podać klasie locale -> http://msdn.microsoft.com/en-us/library/hzz3tw78.aspx.

Czytać dokumentację!
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Szybki parser CSV

Nowy postprzez Corvis » środa, 10 października 2012, 11:20

:oops:

Kurde sorry, wczoraj po prostu za długo siedziałem przy kompilatorze. Miałem gdzieś kawałek kody z tym locale i bezmyślnie go skopiowałem nie patrząc nawet co to jest :) Sprawdzę to dziś i zobaczę.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Szybki parser CSV

Nowy postprzez Corvis » środa, 28 listopada 2012, 00:02

Kolejna rozkimna mam plik z danymi który wygląda tak:

    2012.11.20;22:08:55;1.281590
    2012.11.20;22:09:29;1.281570
    2012.11.20;22:09:35;1.281540

Dane odczytuję według kodu z tego postu, czyli końcowo:

KOD cpp:     UKRYJ  
ng.get(p3,p1,file,err,v); // Gdzie v to wartość odczytanej danej z pliku
 


Tylko, że wyniki jakie otrzymuje to:

    1.28158998489379888
    1.28156995773315424
    1.28153991699218752

No i jest to prawda tylko poco on robi tak długie liczby ?? Potem mam same problemy z formatowaniem tego.

Przykład - głupie i proste mnożenie czyli funkcja mul:

Obrazek

Do formatowania używam funkcji FormatFloat oraz maski 0.#####. Może to jest kwestia innej maski do formatowania już sam się gubię ale czemu takie głupie liczby wychodzą. Przecież w pliku jest jasno napisane jaka to liczba ;) Może da się gdzieś ustawić w funkcji get precyzję ?

Z przykładu na logikę 1.29299 * 10000 = 12929.9 ;) Problem formatowania poruszałem już tutaj.

Z góry dzięki za sugestie :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Szybki parser CSV

Nowy postprzez polymorphism » środa, 28 listopada 2012, 11:09

Z przykładu na logikę 1.29299 * 10000 = 12929.9 ;)

Na logikę zapoznaj się ze sposobem kodowania liczb zmiennoprzecinkowych, wtedy stanie się jasność.

swoją drogą do obliczeń finansowych nie stosuje się liczb zmiennoprzecinkowych, chyba że piszesz program na zaliczenie.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Szybki parser CSV

Nowy postprzez Corvis » środa, 28 listopada 2012, 11:32

To co myślisz lepiej zmiennoprzecinkowe zamienić na całkowite na poziomie tworzenia pliku z danymi ??? Jest to też jakieś rozwiązanie.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Szybki parser CSV

Nowy postprzez polymorphism » środa, 28 listopada 2012, 12:43

Nie tylko "na poziomie pliku z danymi", ale także tam, gdzie dokonywane są wszelkie obliczenia finansowe (pomijam oczywiście obliczenia związane z reprezentacją graficzną, np. przy tworzeniu wykresów - tutaj precyzja nie ma aż takiego znaczenia). Jeszcze raz powtórzę: zapoznaj się z kodowaniem liczb zmiennoprzecinkowych, będziesz wiedział, dlaczego nie mają zastosowania w tego typu aplikacjach.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Corvis
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości