sortowanie linijkami pliku

0

Mam plik w którym są liczby, nie wiem ile jest liczb w jednej linijce oraz nie wiem ile jest linijek w pliku. Chcę te liczby posortować w linijce i przepisać do innego pliku te liczby posortowane w linijkach. W linijkach są liczby całkowite.

 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main(int argc, void *argv[])
{

if(argc < 2)
{
    printf("zle wywolanie progamu");
    exit(1);
}

FILE *fin = fopen(argv[1], "r");
FILE *fout = fopen(argv[2], "w");

int rozmiar = 10;
int tab[rozmiar];
int i;

if(!fin)
{
    printf("blad otwarcia pliku do czytania");
    exit(2);
}

int koniec_pliku = fseek(fin, 0, SEEK_END);
int koniec_lini = fgets(tab, rozmiar, fin);

for(i=0; i <= koniec_pliku; i++)
while(!koniec_lini);
{
    fgets(tab, rozmiar, fin);
    sortuj(tab, rozmiar);
    fprintf(fout, "%d", tab);
}

    return 0;
}

Mógłby mi ktoś z tym pomóc? Jestem początkującym i nie bardzo wiem co mam nie tak. Chcę to napisać jak najprościej, żeby było łatwo zrozumieć :)
Z góry dziękuję za pomoc :)

@Edit

zawartość pliku z liczbami całkowitymi

 
100 20 50 23 56 75 10 12 5 80 98
90 20 1 5 15 23 87
53 35 25 28 92 19 93 44
44 23 25

Teraz trzeba te liczby posortować w linijkach i zapisać do drugiego pliku. Dla powyższego pliku plik2 będzie wyglądał tak:

5 10 12 20 23 50 55 75 80 98 100
1 5 15 20 23 87 90
19 25 28 35 44 53 92 93
23 25 44 
 

Mam nadzieję, że to rozwieje wszelkie wasze wątpliwości co do działania programu :)

0

Czytaj wszystko w linijce aż nie trafisz na znak nowej linii \n. Czytaj wszystko w pliku aż nie trafisz na EOF.

0
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zapoznaj się z inkrementacją bo jej nie rozumiesz: http://4programmers.net/Forum/1101404
  3. Jeżeli używasz argv[2] to sprawdzać musisz argc<3
  4. Dla odczytu wierszy potrzebujesz bufor znakowy, nie liczbowy
  5. Jeżeli przesunąłeś się na koniec pliku to żaden odczyt nie zadziała dopóki nie wrócisz na początek lub gdziekolwiek byle nie na koniec.
  6. Sortować cokolwiek ma sens dopiero po odczytaniu całości.
  7. Odradzam użycia fgets zwłaszcza przy tak małym buforze, polecam fscanf(fin,"%9s",bufor); dla wierszy fscanf(fin,"%9[^\n]s",bufor);
  8. Wyświetlenie bufora znakowego "%s"

Radzę zacząć od byle kursu z google.

Z tego co opisujesz (a nie wgląda to na zadanie dla początkującego - więc coś pokręciłeś).
No więc potrzebujesz tablicy tablic, ilość wierszy jest dynamicznie rozszerzana, każdy wiersz również dynamicznie rozszerzany.
Na początku bieżącym wierszem jest wiersz pierwszy i zawiera 0 liczb.
Po wczytaniu każdej liczby dopisujesz do bieżącego wiersza, zapamiętujesz pozycje ftell() czytasz znak po znaku dopóki napotykasz białe znaki ale nie enter, cofasz się w pliku fseek(), jeżeli w tych białych znakach był enter to przechodzisz na następny wiersz, czyli poszerzasz dynamicznie ilość wierszy.

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