Czytanie z pliku lub z stdio

0

Witam
Muszę sparsować plik i chciałbym mieć możliwość odczytu go za pomocą 2 opcji:

  1. ./app wtedy prosi o nazwę pliku do wczytania
  2. ./app < tekst.txt i wtedy już nie prosi - parsuje.
    Jeśli próbuje robić przez getchar() to program pozostaje w nieskończonej pętli, poza tym w pierwszym przypadku chciałbym najpierw wypisać tekst, w drugim już nie.
    Mam ktoś pomysł jak to rozgryźć? Program oczywiście pisany pod linuksa.

Z góry dzięki za pomoc

0

Nie da rady. Chyba że piszesz jedno a masz na myśli coś innego np:

  1. ./app
  2. ./app tekst.txt
0

Niestety, argumenty są zarezerwowane dla opcji.
Myślałem, żeby otworzyć STDIN jako plik i reagować odnośnie jego długości ale z tym też nie idzie.

0

Ale nazwa pliku też może być opcją. Ogólnie to co napisałeś w pierwszym poście nie ma najmniejszego sensu, bo przekierowałeś wyjście i chciałeś mieć jakieś wejście. Skąd?

0

Racja, już poprawiłem > na <. Co nie zmienia faktu, że wtedy na stdio nie dostaje nazwy tylko cały plik.

0

Sprawdź czy są jakieś argumenty do pliku , jak tak to tenże string jest nazwą pliku do przeróbki ("zmienna" argc > 1) , jak nie (argc = 1) to znaczy że trzeba zapytać usera. Ot i cała filozofia. Nie dawaj żadnych < czy > bo tutaj tylko wprowadzą dodatkowe zamieszanie.

0

Gdybym tak mógł to bym tak zrobił. Niestety czasem dane będą wprowadzane ze standardowego wejścia a czasem z pliku i tu robi się problem. Parametry wywołania nie są do modyfikacji - nie jestem w stanie ich zmienić. Takie wytyczne.

1

Nie ma żadnego problemu. Sprawdzasz czy podano w parametrach plik, jeżeli podano to próbujesz go otworzyć:

FILE *fin=fopen(argv[p],"r");
if(fin) stdin=fin;

I teraz całe czytanie idzie z pliku.

0

Dobry pomysł:
Pobieram pierwszą linię i próbuje otworzyć ją jako plik. Jeśli się nie uda to wczytywanie idzie dalej z standardowego wejścia.

Dziękuje wszystkim za pomoc.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1