• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odczytywanie z pliku tekstu w wierszu poleceń.

Object Storage Arubacloud
+1 głos
1,247 wizyt
pytanie zadane 5 stycznia 2016 w C i C++ przez k222 Nałogowiec (30,150 p.)

Ostatnio przeglądając materiały z programowania natknąłem się na bardzo fajną rzecz - mianowicie coś takiego że w wierszu poleceń (dla Windowsa) wpisujemy nazwa_programu <nazwa_pliku_tekstowego i to ma za zadanie wczytywać po linijce z pliku do programu dotąd aż nie skończą się linijki lub nie wcisnę Ctrl+Z. Miałoby to wyglądać jakoś tak:

#include<iostream>
using namespace std;
int main()
{
char a;
cin.get(a);
while(cin.fail() == false)
{
cout<<a;
cin.get(a);
}
return 0;
}

No i zapisałem ten program, kompiluje go, działa jak wpisuje z klawiatury. Następnie otworzyłem "wiersz polecenia", wpisałem plik<text (plik to nazwa programu a text to dokument z notatnika) i wyskoczyło "Nie można odnaleźć określonego pliku". Spodziewałem się tego więc napisałem całą ścieżkę do obu plików typu:

C:\User\User\Deskop\plik C:\User\User\Deskop\text

I wyskoczyło "System nie może odnaleźć  określonej ścieżki". Może ktoś mi wyjaśnić jak to należy używać albo dać link gdzieś gdzie jest to wytłumaczone bo sam sposób wydaje się dość wygodny np. do testów programu jak docelowo będzie się wpisywało z klawiatury ale chce się zrobić parę podobnych testów i poprawić błędy. 

4 odpowiedzi

+2 głosów
odpowiedź 5 stycznia 2016 przez adrian17 Ekspert (344,860 p.)
Na litość, ludzie, tu nie chodzi o parametry wiersza polecenia tylko o przekierowanie strumienia. Zauważcie "<".

W każdym razie, pierwsza część wypowiedzi MetGang jest rozwiązaniem - nie używasz pełnej nazwy pliku.

Moja rada dla każdego programisty: w opcjach widoku Eksploratora odznaczcie checkbox "ukryj rozszerzenia znanych typów plików".
0 głosów
odpowiedź 5 stycznia 2016 przez MetGang Nałogowiec (34,360 p.)
Po pierwsze, rozszerzenia pliku są wymagane inaczej system zinterpretuje to jako katalog. Po drugie, ten kod nie zadziała Ci z wiersza poleceń tak jak normalnie. Do tego potrzebne są parametry przy wywoływaniu programu:

http://kacperkolodziej.pl/artykuly/programowanie/214-cpp-wczytywanie-parametrow-programu-z-linii-polecen.html
http://www.cauchy.pl/programy/c++/parametry-wiersza-polcen/
komentarz 5 stycznia 2016 przez adrian17 Ekspert (344,860 p.)
edycja 5 stycznia 2016 przez adrian17

Po pierwsze, rozszerzenia pliku są wymagane inaczej system zinterpretuje to jako katalog.

Nieprawda, rozszerzenie nie ma znaczenia. Może być plik o nazwie "abc" i może być folder o nazwie "plik.jpg". Oczywiście to nie zmienia faktu, że zawsze powinno się używać prawdziwą nazwę pliku.

0 głosów
odpowiedź 5 stycznia 2016 przez juriiw Gaduła (3,470 p.)

Tak jak napisał kolega MetGang, funkcja main posiada argumenty:

int main(int argc, char * argv[])

argc - to jakby licznik argumentów

char *argv[] - to wskaźnik do tablicy c-stringów w których znajdą się nazwy "parametry" twojego programu, wywoływanego z linii poleceń.

Na przykład: jeżeli twój program posiada nazwę puszczambaki.exe to w wierszu poleceń pisząc:

C:\>puszczambaki.exe parametr 10

*argv[0] - to będzie nazwa programu - czyli "puszczambaki" jako c-string

*argv[1] - to będzie nazwa twojego parametru - czyli "parametr" jako c-string

*argv[2] - to będzie następny parametr - czyli "10" - UWAGA też jako c-string.

0 głosów
odpowiedź 5 stycznia 2016 przez Vodoo Dyskutant (9,270 p.)

int main(int argc, char *argv[])
{
	if (argc == 2)
    {
         std::string file = std::string(argv[1]);
    }
    ...
	return 0;
}

 

W kolejności:

jeśli ilość argumentów jest równa 2 (jeśli jest jakiś argument) to zapisz (po przekonwertowaniu) drugi argument do zmiennej file.

Mam nadzieję, że zrozumiałeś to co napisałem :D

* argv[0] to nazwa pliku

komentarz 5 stycznia 2016 przez juriiw Gaduła (3,470 p.)
...no i w czym jest problem? Nie wiesz jak zamienić c-string na string? Wybacz ale nie wiem o co próbujesz zapytać.
komentarz 5 stycznia 2016 przez Vodoo Dyskutant (9,270 p.)
edycja 5 stycznia 2016 przez Vodoo
Do kogo to jest skierowane?

//Edit: Spoko :D
komentarz 5 stycznia 2016 przez juriiw Gaduła (3,470 p.)
..kurcze pogubiłem się hehe i robię zamieszanie, nvm.

Podobne pytania

0 głosów
1 odpowiedź 201 wizyt
pytanie zadane 29 sierpnia 2016 w C i C++ przez plkpiotr Stary wyjadacz (12,420 p.)
0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 5 czerwca 2022 w C i C++ przez wasiu Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 686 wizyt
pytanie zadane 15 kwietnia 2017 w Java przez plkpiotr Stary wyjadacz (12,420 p.)

92,554 zapytań

141,399 odpowiedzi

319,535 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...