Nowe posty

xx Jaki linux na laptop/tablet hybrydowy? (28)
Dzisiaj o 12:49:44
xx Repozytoria Archa (9)
Wczoraj o 14:22:11
xx Otwaty port 123 udp (4)
Wczoraj o 13:52:00
xx Brak możliwości instalacji aplikacji na Opensuse Tumbleweed. (7)
Wczoraj o 12:45:32
xx konfiguracja sieci domowej (6)
2019-12-14, 23:58:47
xx petla while (11)
2019-12-14, 22:14:49
xx Ktoś zna datę przejścia Minta 19.3 z bety do oficjala? (47)
2019-12-14, 14:28:28
xx Jak,Zrobić kopię całego dysku? (3)
2019-12-14, 08:39:41
xx Brak rozdzielczości 16:9 ubuntu 19.04 (1)
2019-12-14, 01:46:25
xx Dziwne połączenia sieciowe! Co to jest? (14)
2019-12-13, 22:59:42

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

Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 26
    • Zobacz profil
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)

Offline jan karwowski

  • Users
  • Guru
  • *****
  • Wiadomości: 844
    • Zobacz profil
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.


Offline

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 26
    • Zobacz profil
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

Offline Sebastian Chyba zartujecie

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 191
    • Zobacz profil
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

Offline jan karwowski

  • Users
  • Guru
  • *****
  • Wiadomości: 844
    • Zobacz profil
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++

Offline Sebastian Chyba zartujecie

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 191
    • Zobacz profil
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