Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Odczytywanie N-tej lini pliku (C++)  (Przeczytany 12096 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