Wykres [zedGraph], problem z pobieraniem danych z pliku

0

Witam, muszę napisać program, który rysuje wykres z danych umieszczonych w pliku z rozszerzeniem .d01 . Pierwszy raz mam do czynienia z rysowaniem wykresów i nie mam pojęcia jak to zrobić. Korzystam z biblioteki zedGraph. Tak wygląda plik z danymi po otwarciu w notatniku:
Time(sec) Force(kgf) Jaw(mm) Pram PTemp Strain Stress(MPa) Stroke(mm) TC1(C) wedge(mm)
0.00000 -257.41 -7.2547e-05 9.2252 0.0063355 5.1412e-06 -21.767 9.2182 16.249 -7.1009
0.20000 -254.82 -1.6591e-05 9.2252 0.71622 4.4947e-06 -21.647 9.2199 16.295 -7.2109
0.40000 -249.25 -0.00022489 9.2252 1.7023 -1.5689e-05 -21.166 9.2222 16.287 -7.2167
0.60000 -245.13 -3.3101e-05 9.2252 2.7017 -6.7152e-06 -20.814 9.2235 16.282 -7.2166
0.80000 -240.49 0.00022844 9.2252 3.7017 2.9133e-05 -20.43 9.2247 16.27 -7.2156
1.00000 -236.45 0.00012961 9.2252 4.7017 1.7757e-05 -20.082 9.2259 16.336 -7.2145
1.20000 -232.83 -0.00019927 9.2252 5.7017 -1.2535e-05 -19.774 9.2292 16.544 -7.2137
1.40000 -229.69 9.3733e-05 9.2252 6.7017 1.4729e-05 -19.505 9.2306 16.518 -7.2127
1.60000 -226.69 0.00013697 9.2252 7.7017 1.6552e-05 -19.249 9.2314 16.468 -7.2119

Muszę pobrać dwa parametry (np. Time i Force) z wybranego przez użytkownika pliku i zakres w jakim mają być pobrane dane. Proszę o pomoc.

0

Plik wygląda jak csv rozdzielony tabulatorami.
Czy kolumny Time i Force zawsze są w tych samych miejscach?
Domyślam się że masz narysować wykres liniowy, więc time to jedna seria danych (pewnie oś X), a force, to druga (pewnie oś Y). Nie wiem jak w zedGraph można podać serie danych, ale jeśli używasz zedGraph to powinieneś to wiedzieć, pewnie da się jako tablicę, a tu wystarczy ci dwuwymiarowa tablica double.

0

Moja rada, wyrzuć to zed w cholere i zrób to w MSCharts, oszczędzisz sobie kł
opotów.

0

W sumie biblioteka nie ma znaczenia, może być MSChart. Ale nadal nie wiem jak ma wyglądać ten fragment kodu, który pobiera te dane. Użytkownik wybiera co ma być na osi x a co na osi y. Te zmienne są w każdym pliku w tych samych miejscach, wykres jest liniowy.

0

http://archive.msdn.microsoft.com/mschart
Kiedyś używałem tego i gdy byłem w potrzebie zajrzałem do helpa MS i znalazłem tam nawet aplikacje pokazującą użycie komponentu.. Poszukaj, poczytaj..

0

dzięki, zaraz się z tym zapoznam

0

Ustalmy z czym masz problem, bo z tego co piszesz to wydaje mi się że także z samym pobraniem danych z pliku.
Poszukaj jest gdzieś fajny parser to csv działający na strumieniach.

0

Tak, mam problem z pobraniem danych z pliku. Jedyne operacje jakie wykonywałem na plikach to odczytywanie zawartości za pomocą ReadLine. Także jestem w tym temacie zielony. Otwieram plik ale nie wiem jak wydobyć z niego interesujące mnie wartości. Jeśli ktoś z Was ma jakiś fragment kodu rozwiązujący ten problem to chętnie bym go zobaczył :). Znalazłem gdzieś kod programu, który działa na plikach xml a nie mogę tego przenieść na pliki z rozszerzeniem .d01

0

Przykładowy plik:

Time(sec)        Force(kgf)        Jaw(mm)        Pram        PTemp        Strain        Stress(MPa)        Stroke(mm)        TC1(C)        wedge(mm)
 0.00000        -257.41        -7.2547e-05        9.2252        0.0063355        5.1412e-06        -21.767        9.2182        16.249        -7.1009
 0.20000        -254.82        -1.6591e-05        9.2252        0.71622        4.4947e-06        -21.647        9.2199        16.295        -7.2109
 0.40000        -249.25        -0.00022489        9.2252        1.7023        -1.5689e-05        -21.166        9.2222        16.287        -7.2167
 0.60000        -245.13        -3.3101e-05        9.2252        2.7017        -6.7152e-06        -20.814        9.2235        16.282        -7.2166
 0.80000        -240.49        0.00022844        9.2252        3.7017        2.9133e-05        -20.43        9.2247        16.27        -7.2156
 1.00000        -236.45        0.00012961        9.2252        4.7017        1.7757e-05        -20.082        9.2259        16.336        -7.2145
 1.20000        -232.83        -0.00019927        9.2252        5.7017        -1.2535e-05        -19.774        9.2292        16.544        -7.2137
 1.40000        -229.69        9.3733e-05        9.2252        6.7017        1.4729e-05        -19.505        9.2306        16.518        -7.2127
 1.60000        -226.69        0.00013697        9.2252        7.7017        1.6552e-05        -19.249        9.2314        16.468        -7.2119

Pierwsza linijka podczas parsowania nas nie interesuje.
Jeden wpis zawiera:

Time Force Jaw Pram Ptemp Strain Stress Stroke TC1 wedge
Czyli biorąc wpis
0.00000 -257.41 -7.2547e-05 9.2252 0.0063355 5.1412e-06 -21.767 9.2182 16.249 -7.1009
Powinniśmy dostać wartości:
Time Force Jaw Pram Ptemp Strain Stress Stroke TC1 wedge
---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ----------------
0.00000 -257.41 -7.2547e-05 9.2252 0.0063355 5.1412e-06 -21.767 9.2182 16.249 -7.1009
Jak?
1.Pozbywamy się zbędnych spacji.
Przed:
0.00000 -257.41 -7.2547e-05 9.2252 0.0063355 5.1412e-06 -21.767 9.2182 16.249 -7.1009
Po:
0.00000 -257.41 -7.2547e-05 9.2252 0.0063355 5.1412e-06 -21.767 9.2182 16.249 -7.1009
2.Explode'ujemy wartości po spacji
Przed:
0.00000 -257.41 -7.2547e-05 9.2252 0.0063355 5.1412e-06 -21.767 9.2182 16.249 -7.1009
Po:
0.00000
-257.41
-7.2547e-05
9.2252
0.0063355
5.1412e-06
-21.767
9.2182
16.249
-7.1009

I teraz wiemy, że pierwsza wartość to jest Time, druga wartość to Force, trzecia to Jaw, itd.
Czyli z wpisu
0.00000 -257.41 -7.2547e-05 9.2252 0.0063355 5.1412e-06 -21.767 9.2182 16.249 -7.1009
Dowiedzieliśmy się, że:

Time Force Jaw Pram Ptemp Strain Stress Stroke TC1 wedge
0.00000 -257.41 -7.2547e-05 9.2252 0.0063355 5.1412e-06 -21.767 9.2182 16.249 -7.1009
()
0

Czyli w taki sposób mogę to przenieść do tablicy 2-wymiarowej, gdzie tab[0][] to beda wartości paramtru time, tab[1][] to beda wartosci parametru force itd.?

0

Udało mi się już wydobyć dane z pliku do tablicy string, ale mam kolejny problem: jak przekształcić taką wartość: "-7.2547e-05" zapisaną jako string na typ double? Parse ani Convert nie działa :/

0
freestyle napisał(a)

jak przekształcić taką wartość: "-7.2547e-05" zapisaną jako string na typ double? Parse ani Convert nie działa :/

Nie lubimy oszukiwania.

using System;
using System.Globalization;

namespace ConsoleApplication16
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "-7.2547e-05";
            double d = double.Parse(s, CultureInfo.InvariantCulture);
            Console.WriteLine(d);
            Console.ReadLine();
        }
    }
}
0

Dzięki, nie znałem tej części CultureInfo.InvariantCulture

0

To poczytaj sobie o ustawieniach regionalnych.
Domyślnie metoda double.Parse korzysta z systemowych ustawień. U Ciebie zapewne ustawiony jest język polski, w którym separatorem dziesiętnym jest przecinek. Nic dziwnego, że nie parsowała tekstu zawierającego kropkę, która nie może się znajdować w polskim zapisie liczby. Stąd wynika konieczność użycia przeciążonej wersji tej metody, która przyjmuje argument wymuszający użycie innych ustawień regionalnych.

0

Mój wykres wyświetla wszystkie punkty z pliku w jednym oknie, tzn. mam kilka tysięcy wartości i one wszystkie są upchane w jednym małym okienku. Wie ktoś jak zrobić żeby na osi x i y jednocześnie było widocznych 10 punktów a reszta by się pojawiała dopiero po przesunięciu suwaka? Działam na zedgraph. Nie mogę się z tym uporać:/

0

Witam! Muszę poszerzyć mój program o obsługę myszy, mianowicie użytkownik powinien mieć możliwość określić fragment wykresu, który ma pozostać wyświetlony poprzez kliknięcie myszką w polu wykresu (klika na wykresie np. prawym przyciskiem myszy i wybiera opcje pozostaw wykres na lewo/prawo od kliknietego miejsca). Wie ktoś może czy da się coś takiego zrobić, a jeśli tak to w jaki sposób?

0

Witam! Muszę poszerzyć mój program o obsługę myszy, mianowicie użytkownik powinien mieć możliwość określić fragment wykresu, który ma pozostać wyświetlony poprzez kliknięcie myszką w polu wykresu (klika na wykresie np. prawym przyciskiem myszy i wybiera opcje pozostaw wykres na lewo/prawo od kliknietego miejsca). Wie ktoś może czy da się coś takiego zrobić, a jeśli tak to w jaki sposób?

1 użytkowników online, w tym zalogowanych: 0, gości: 1