Elektroda.pl
Elektroda.pl
X
SterControl
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

zapis/odczyt do pliku tekstowego w delphi

maciekm7 24 Mar 2012 16:17 3917 10
  • #1 24 Mar 2012 16:17
    maciekm7
    Poziom 9  

    Witam
    potrzebuje dopisać do programu służącego do obliczania równań tetodą gaussa procedure służącą do odczytu/zapisu wyników do pliku. Narazie skupiłem się na zapisie do pliku lecz i to mi wychodzi z marnym skutkiem. Prosze o pomoc i ewentualne wskazanie błędów. To jest kod programu:

    Kod: delphi
    Zaloguj się, aby zobaczyć kod

    0 10
  • SterControl
  • #2 24 Mar 2012 17:40
    Dżyszla
    Poziom 42  

    Jeśli chcesz zapisać to dlaczego używasz funkcji czytaj (=read) ?

    Generalnie posługiwanie się starymi metodami dostępu do pliku nie jest czymś złym, ale jest kilka innych, nowoczesnych metod.

    Możesz np zapisać sobie wszystko w strukturze TStringList a potem użyć metody SaveToFile.

    Tak w zasadzie - jak chcesz zapisywać wyniki i na czym ma polegać odczyt?

    Na marginesie: jeśli problem ogranicza się do zapisu/odczytu to zamieszczaj tylko fragmenty kodu odpowiedzialne za to.

    0
  • #3 24 Mar 2012 19:03
    maciekm7
    Poziom 9  

    udało mi się zrobić zapis/odczyt taki o jaki mi chodziło ale niestety po dokonaniu odczytu program wraca do wypełniania nowej macierzy. Nie wiem co z tym teraz można zrobić. Oto zmieniony kod:

    Kod: delphi
    Zaloguj się, aby zobaczyć kod

    0
  • SterControl
  • #4 24 Mar 2012 21:26
    Dżyszla
    Poziom 42  

    No zastanawiam się, czy to żart, czy późna pora tylko? Przecież jak odczytujesz to nie wypełniasz... czyli jeśli if jest spełniony to odczytujesz, a w przeciwnym wypadku (else) wykonujesz blok odpowiedzialny za wypełnienie.

    Ponadto przed odczytem warto byłoby ustalić rozmiar albo pobrać go z pliku również. Mam wrażenie, że wstawiłeś kod gdzie pasowało, jakbyś nie wiedział, gdzie do tej pory dokonywałeś wypełniania.

    0
  • #5 04 Kwi 2012 11:11
    maciekm7
    Poziom 9  

    Dzięki Dżyszla miałeś racje. Komenda else rozwiązała mój problem.
    A czy może mi ktoś podpowiedzieć jak przerobić ten program na VCL ?

    0
  • #7 10 Kwi 2012 14:47
    maciekm7
    Poziom 9  

    Witam ponownie
    Postanowiłem przerobić program aby możliwe było zapisanie/odczytanie macierzy podanej z klawiatury (przed dokonanymi obliczneniami). Niestety zapis do pliku działa lecz z odczytem mam problem. Wyswietla mi się runtime error 106 (z tego co udało mi się doczytać niezgodność pliku tekstowego z liczbami). W jaki sposób można to poprawić?? Oto kod zapisu/odczytu:

    Kod: delphi
    Zaloguj się, aby zobaczyć kod

    0
  • #8 10 Kwi 2012 15:31
    blue_17
    Poziom 32  

    Nie wiem jakie masz liczby całkowite czy tez nie ale spróbuj

    StrToInt() funkcja konwertuje ze stringa do inta :)

    Nigdzie nie widzę żebyś robił coś takiego

    w załączniku program liczący robiący podobnie jak u Ciebie tylko tam juz mam dynamiczne tablice

    zauważ

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    w programie jeszcze masz pokazane jak zrobić zaokrąglenia oraz z powrotem konwersje do stringa żeby zapisać do pliku

    zwróć uwagę na wykaz modułów w sekcji uses

    Pozdrawiam

    0
    Załączniki:
  • #9 10 Kwi 2012 21:52
    maciekm7
    Poziom 9  

    A mógłby ktoś wytłumaczyć w jaki sposób zastosować w moim programie tą funkcje

    Kod: delphi
    Zaloguj się, aby zobaczyć kod
    ??
    Aha i mam jeszcze jedno pytanie: Dlaczego gdy z pliku czytałem tylko jedną macierz oznaczoną jako q[i,i] bedącą wynikiem przekształceń wszystko działało a teraz gdy usiłuje zczytac macierze oznaczone jako a[i,j] i x[i,i] to program nie potrafi tego zrobić??

    0
  • #10 10 Kwi 2012 22:45
    blue_17
    Poziom 32  

    maciekm7 napisał:
    A mógłby ktoś wytłumaczyć w jaki sposób zastosować w moim programie tą funkcje
    Kod: delphi
    Zaloguj się, aby zobaczyć kod
    ??
    Aha i mam jeszcze jedno pytanie: Dlaczego gdy z pliku czytałem tylko jedną macierz oznaczoną jako q[i,i] bedącą wynikiem przekształceń wszystko działało a teraz gdy usiłuje zczytac macierze oznaczone jako a[i,j] i x[i,i] to program nie potrafi tego zrobić??


    1. Przekonwertuj przy odczycie z pliku
    2. Prawdopodobnie albo źle masz coś z iterowanymi zmiennymi lub źle poruszasz się po pliku

    Nie pokazujesz nawet struktury pliku z wartościami macierzy

    Ja proponował bym Ci coś takiego

    zapis/odczyt do pliku tekstowego w delphi

    rozwiązanie dostałeś ode mnie już na tacy :)

    Taki program w tej chwili program skrobnął konsolowo w C, ale to chyba dlatego że tam jest prostsza obsługa plików wejścia ale jak kto woli :)

    0
  • #11 21 Kwi 2012 23:41
    maciekm7
    Poziom 9  

    Witam
    Udało mi się stworzyc program w vcl, lecz niestety nie potrafie przetwożyć wartości liczbowych odczytanych z dwóch stringgridów.Wartości te po dokonaniu obliczeń chcialbym umieścić w stringgrid3. Oto kod odpowiedzialny za to :

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    po odpaleniu programu i wywołaniu procedury która powinna obliczyć równanie wyskakuje błąd :Project project1.exe raised exception class EAccessViolation with message 'Access violaton at Address 0047FD5 in module Project1.exe. Read at address 00000004. Process stopped. Use step or run to continue. W jaki sposób moge zlikwidować ten błąd??

    0