Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Odczytywanie N-tej lini pliku (C++)  (Przeczytany 12068 razy)

FROGER

  • Gość
Odczytywanie N-tej lini pliku (C++)
« Odpowiedź #15 dnia: 2005-12-05, 20:37:57 »
Ten program by byl oddzielnym progsem!Po prostu polegaloby to na tym, ze "sformatowal" bym sobie nowa wersje pliku (plik zawiera specyficzne dane, ktore sie raczej nie zmieniają, a już na pewno nie podczas pracy programu!. A ze do pliku dopisuje recznie to mysle ze to powinno przejsc (a bardzo zalezy mi na szybkosci)

jk33

  • Gość
Odczytywanie N-tej lini pliku (C++)
« Odpowiedź #16 dnia: 2005-12-05, 20:45:15 »
2005-12-05 20:37:57 FROGER napisał:

> Ten program by byl oddzielnym progsem!Po prostu polegaloby to na tym, ze "sformatowal"
 > bym sobie nowa wersje pliku (plik zawiera specyficzne dane, ktore sie raczej nie zmieniają, a
 > już na pewno nie podczas pracy programu!. A ze do pliku dopisuje recznie to mysle ze to powinno
 > przejsc (a bardzo zalezy mi na szybkosci)

Ale generalnie nie ma takiej potrzeby,
program formatujący przyspieszyłby pdrugi rogram
tylko gdyby plik miał linie o długości >1024,
dla krótszych linii czas wzrośnie,
(bo zamiast wczytać np. 300bajtów
na linię musisz wczytać 1024)

A wykonanie programu formatującego zajmowałoby
przawdopodobnie więcej czasu niż wykonanie
właściwego przeszukania.


FROGER

  • Gość
Odczytywanie N-tej lini pliku (C++)
« Odpowiedź #17 dnia: 2005-12-05, 22:46:03 »
Chyba mnie nie zrozumiales do konca :) Program formatujacy sfoja droga :) a to swoją :)

Powiedzmy ze nie ma problemu z progsem formatujacym bo plik sie przeformatuje, bo jakichkolwiek zmianach w nim, i takie rzeczy mozna sobie zrobic "osobno". W samym pliku podczas uzywania programu zmian nie bedzie :) i zreszta prgram w nim tez nie wykonuje zadnych zmian - po prostu ma odczytac, a to czy juz pllik jest OK to juz nie jego problem :). W kazdym razie problem uznaje za rozwiazany

devilan

  • Gość
Odczytywanie N-tej lini pliku (C++)
« Odpowiedź #18 dnia: 2005-12-06, 14:26:41 »
2005-12-05 18:47:06 jk33 napisał:
 > Najlepiej, żebyś wykorzystał w celu czytania
 > znaków funkcję getc() z stdio.h,
 > albo funkcję read() z unistd.h

NIE, mieszanie ze soba bibliotek (i naglowkow) z C oraz C++ co prawda działa, ale nie jest najlepszą formą prezentowania swoich umiejętności jeśli chodzi o C++!!! Wręcz przeciwnie - jeśli programujesz w C++ korzystaj z mechanizmów i bibliotek dla niego przeznaczonych jeśli załatwiają problem, bo inaczej tylko pokazujesz, że nie potrafisz do końca programować w C++, a tylko w C :/

A oto kod, który rozwiązuje problem (działa z kompilatorem obsługującym namespace'y - czyli na przykład linuksowym g++):
/* BEGIN OF C++ CODE */
using namespace std;
#include
#include

int main(int argc, char *argv[])
{
    int n;
    char bufor[1024];
    if(argc != 3)
    {
        cerr << "usage: program numer_linii plikn";
        exit(-1);
    }
    n = atoi(argv[1]);
    if(n < 1)
    {
        cerr << "Podaj jakis normalny numer liniin";
        exit(-2);
    }
    fstream plik(argv[2]);
    if(!plik)
    {
        cerr << "Nie moge otworzyc do odczytu pliku o nazwie " << argv[2] << endl;
        exit(-3);
    }

    for(int i = 0; i < n; i++)
    {
       plik.getline(bufor, sizeof(bufor));
       if(plik.bad())
       {
          cerr << "Blad odczytu pliku (moze zbyt wczesny koniec?)!n";
          exit(-4);
       }
    }
    cout << bufor << endl;
}
/* END OF SOURCE */

Od siebie dodam, że jesteś leniem (to do autora tematu). Wcześniej Ci napisałem wszystko co i jak, ale nie sprawdziłeś. Widać nie chcesz się niczego nauczyć tylko zaliczyć jakieś ćwiczenia z C++ :/
Ni mniej pozdrawiam

jk33

  • Gość
Odczytywanie N-tej lini pliku (C++)
« Odpowiedź #19 dnia: 2005-12-06, 14:48:54 »
2005-12-06 14:26:41 devilan napisał:

> 2005-12-05 18:47:06 jk33 napisał:
 >  > Najlepiej, żebyś wykorzystał w celu czytania
 >  > znaków funkcję getc() z stdio.h,
 >  > albo funkcję read() z unistd.h
 >
 > NIE, mieszanie ze soba bibliotek (i naglowkow) z C oraz C++ co prawda działa, ale nie jest
 > najlepszą formą prezentowania swoich umiejętności jeśli chodzi o C++!!! Wręcz przeciwnie -
 > jeśli programujesz w C++ korzystaj z mechanizmów i bibliotek dla niego przeznaczonych jeśli
 > załatwiają problem, bo inaczej tylko pokazujesz, że nie potrafisz do końca programować w C++, a
 > tylko w C :/
 >
Chcialem powiedzieć, żeby zrezygnować
z iostream i użyć unistd.h

read() jest poprostu szybszy,
niż cin.

I nie jest to problemem w C++

devilan

  • Gość
Odczytywanie N-tej lini pliku (C++)
« Odpowiedź #20 dnia: 2005-12-06, 17:31:51 »
2005-12-06 14:48:54 jk33 napisał:
 > Chcialem powiedzieć, żeby zrezygnować
 > z iostream i użyć unistd.h
 >
 > read() jest poprostu szybszy,
 > niż cin.
 >
 > I nie jest to problemem w C++

Coz... temat kategorii chyba jednoznacznie wskazuje o jaki jezyk programowania chodzi...
No chyba, ze nie - to polecamy takie rozwiazanie:
head -n NUMER_LINII NAZWA_PLIKU | tail -n 1
:)

A ogolnie to C jest znacznie szybszy od C++:] Ale to tak offtopic :P