Ordinare un file.txt

di il
6 risposte

Ordinare un file.txt

Ciao a tutti, devo ordinare un file formato cosi:
%s(max 40) %s %s %s %f
Il numero di righe lo conosco (183)
La lunghezza delle righe non può superare i 1000 caratteri!!

Secondo voi come potrei fare?
Qualcuno ha già qualche algoritmo già scritto?
Ho girovagato un po' sul web ma non si parla molto di questo e finchè è ordinare numeri sono capace ma questo ancora devo impararlo!!

es file.txt:
Giulio_Lava arancione blu viola 17.98
Ambrogio_Verdi giallo verde rosso 21.15
Alfredo_Tota verde marrone blu 11.30

Grazie in anticipo a chiunque riesca a darmi una mano

6 Risposte

  • Re: Ordinare un file.txt

    Quali sono le chiavi su cui eseguire l'ordinamento, e quale "priorità" hanno? (dubito che devi ordinare prendendo come chiave l'intera riga, più probabilmente dovrai ordinare prima in base al nome, poi tra gli omonimi in base al numero, ecc.).

    Comunque, se la chiave primaria (la prima su cui esegui l'ordinamento) è una stringa, ti conviene usare un ordinamento per indici, ovvero in un vettore hai i record, ma tu ne ordini un altro che contiene gli indici del primo vettore. Fatto ciò, ovviamente con un algoritmo efficente tipo il quicksort, puoi ordinare le altre chiavi anche solo con l'insertion sort, che è molto efficiente se applicato a insiemi quasi ordinati.

    ciao
  • Re: Ordinare un file.txt

    Si avevo dimenticato di specificarlo! L'ordinamento va fatto a seconda del nome e in caso di omonimia del primo colore!!

    Mi spiegheresti come utilizzare la quicksort con i char perche ho trovato solo esempi con numeri e non riesco a farla funzionare con i caratteri
  • Re: Ordinare un file.txt

    Visto l'esiguo numero di righe da ordinare non ti conviene usare algoritmi di ordinamento complicati. Ti consiglio di usare un semplicissimo insertion sort.

    Ecco una funzione in C che lavora sulle stringhe utilizzando la strcmp:
    
    // Insertion sort su stringhe per C
    void insertionSort( char* data[], int size )
    {
      int j;
      char* p; // puntatore ad una stringa 
    
      for( int i = 1; i < size; ++i )
      {
        p = data[i]; 
    	 j = i - 1;
    
        while( j >= 0 && strcmp( p, data[j] ) < 0 )
        {
          data[j + 1] = data[j]; 
    		--j;
        }
    	 data[j + 1] = p; 
      }
    
    }
    
  • Re: Ordinare un file.txt

    Grazie mentat ma perdona la mia ignoranza;

    potresti spiegarmi come funziona questa funzione?
    o al limite postare un programmino funzionante che provo a vedere se ci arrivo da solo xD

    te ne sarei megagrato
  • Re: Ordinare un file.txt

    L'insertion sort è l'algoritmo che usi ad esempio per ordinare una mano di carte da gioco.

    In pratica in ogni momento l'insieme delle carte che hai in mano è suddiviso in un gruppo già ordinato (supponiamo che lo tieni a sinistra) e un gruppo da ordinare (a destra), e supponiamo che l'ordinamento sia crescente; quindi:

    1. La prima carta a sinistra per definizione è già ordinata;
    2. Prendi la prima carta del gruppo non ordinato (ovvero la carta più a sinistra del gruppo di destra);
    3. Scambi la carta selezionata con quelle alla sua sinistra, fino a quando non trovi una carta di valore più piccolo;
    4. Ripeti dal punto 2 fino a quando non hai svuotato il gruppo non ordinato.

    In realtà questa è l'implementazione "naif"; quella di mentat è più efficiente perché rende più piccolo il ciclo più interno, e in pratica è come se tu togliessi la carta selezionata dalla mano, facessi scalare qualle più grandi che si trovano alla sua sinistra e poi reinserissi la carta nel posto vuoto.

    ciao.
  • Re: Ordinare un file.txt

    A n t o n i o ha scritto:


    Grazie mentat ma perdona la mia ignoranza;

    potresti spiegarmi come funziona questa funzione?
    o al limite postare un programmino funzionante che provo a vedere se ci arrivo da solo xD

    te ne sarei megagrato
    Cliccando sul link che trovi nel mio messaggio trovi un esempio molto semplice ed ampiamente documentato


    Inviato dal mio iPad utilizzando Tapatalk
Devi accedere o registrarti per scrivere nel forum
6 risposte