In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

di il
10 risposte

In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

Buongiorno... Dovendo creare un programma la quale di ogni duplicato trovato in file1 e file2, scriverne in un terzo..Fino a qui ci siamo e funziona....
ora... Dovrei salvare l'ultimo numero intero della riga in una variabile qualsiasi... Ovvero: 2
31101B0100 VITE A TESTA CILINDRICA UNI 5931 - M4X10 2
Qualche spunto per questa operazione? Meglio.. Siccome dopo il 2 c'è un '\0', dovrei dire al programma di salvarmi il numero prima...

10 Risposte

  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    Se hai la ragionevole certezza che il numero è effettivamente l'ultimo elemento della stringa ed è seguito dal terminatore, l'approccio più ragionevole è quello di ottenere un puntatore allo spazio che precede il numero effettuando una ricerca di carattere "da destra" ossia da fine riga con . A quel punto puoi agevolmente convertire la substringa puntata in numero usando atoi() o simili funzioni non standard offerte dal compilatore.
  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    
    void confrontoDueFile(FILE *fp,FILE *fp2,FILE *fp3){
        char stringaFP[100], stringaFP2[100];
        int  i=0,conta=0;
    
        //per poter cercare numero
        char cerca[100];
    
        fprintf(fp3, "Questi sono tutte le righe trovate dupplicate nei DUE file messi a confronto: \n");
       while(fscanf(fp, "%s", stringaFP)==1)
       {
          i=0;
          rewind(fp2);
          while(fscanf(fp2, "%s", stringaFP2)==1){
             if(strcmp(stringaFP, stringaFP2)==0){
                conta++,
                i++;
                if(i == 1){//deve stare all'interno dell'ultima condizione
                    fprintf(fp3,"%s -> ",stringaFP);
                    quantita(stringaFP,cerca);
                    printf("%s",cerca);
                }
             }
          }
        if(i>0){//deve stare alla fine del primo ciclo creato!!
            fprintf(fp3,"n.Volte trovati in file1 e file2: %d\n",i);
        }
       }
       fprintf(fp3,"Totale duplicati: %d\n",conta);
    }
    
    //cerco la quantità, ovvero numero intero ultimo della stringa
    void quantita(char stringaFP[],char cerca[]){
          int lunghezzaStringa;
          int ce=0,si=1;
          lunghezzaStringa = strlen(stringaFP);//acquisisco lunghezza stringa..
          while(si==1){
            if (stringaFP[lunghezzaStringa] != ' '){
                cerca[ce]=stringaFP[lunghezzaStringa];
                lunghezzaStringa--;
                ce++;
            }
            else{
                si=0;
            }
        }
    }
    
    Ho riprovato.. Non essendo esperta mi sto imbattendo in qualcosa di troppo impegnativo dato le mie conoscenze?? Riuscireste a spiegarmi come fare?
  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    Un esempio di due file completi?
  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    FILE 1:
    $$G99999 PINZA POSIZIONATORE TRASV 1
    $$G44444 SUPPORTO NACCHERA 1
    $$G22222 CESOIA INSERIMENTO TRASVERSALE 1
    $$G11111 CESOIA TRASVERSALE 1

    FILE 2:
    71165 CILINDRO DI SALDATURA 3
    71179 PINZA TRASPORTATORE VERTICALE 1
    71109 CILINDRO SALDATURA SUP Ø125 1
    76610 CILINDRO SALDATURA INF Ø90 1
    73338 PINZA TRASPORTATORE ORIZZ 1
    volendo si può tramutare tutti i file cosi se è piu semplice... PINZA TRASPORTATORE ORIZZ 73338 1

    Ora ho un problema... Salvare in una stringa:73338, stringa2: PINZA TRASPORTATORE ORIZZ , stringa 3: 1
  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    M.A.W. 1968 ha scritto:


    strrchr()....... atoi()...
    Mi domandavo se non si potesse, fra l'altro, operare usando anche strlen( ), come dal seguente modello meramente esemplificativo:
    #include <stdio.h>
    #include <string.h>
    
    
    int main() {
    
    	char s[] = "31101B0100 VITE A TESTA CILINDRICA UNI 5931 - M4X10 2";
    	int i;
    	
    	i = atoi(s + (strlen(s) - 1));
    	printf("%d\n", i);
    
    	return (0);
    
    }
  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    Ok.. D'accordo... vuot l'ultimo numero me lo salva...Ora riusciresti solo a darmi una mano per questo...:


    salvare la prima in una stringa:73338 e in una seconda stringa2: PINZA TRASPORTATORE ORIZZ
  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    Se questa operazione devi farla per ciascuna riga, io comincerei con usare la funzione , per distinguere le varie righe attraverso il carattere (o i caratteri) escape di fine riga a capo.
  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    vuott ha scritto:


    Se questa operazione devi farla per ciascuna riga, io comincerei con usare la funzione , per distinguere le varie righe attraverso il carattere (o i caratteri) escape di fine riga a capo.
    Ci posso provare... ma come faccio a dire strtok( ) di dividermi questo = $$G47464 PINZA FISSA DX 2
    in...
    Stringa1 = $$G47464
    Stringa1 = PINZA FISSA DX
    oppure:
    31101B0100 VITE A TESTA CILINDRICA UNI 5931 - M4X10 2
    Stringa1 = 31101B0100
    stringa2= VITE A TESTA CILINDRICA UNI 5931 - M4X10

    In base alle mie conoscenze non riesco a capire come fare...
  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    L' ordine lo decidi tu in base alle tue esigenze e, soprattutto, in base alla tua organizzazione. Una soluzione semplice sia per le stringhe che per il numero in un colpo solo sarebbe stata l' utilizzo di sscanf(), a patto che non ci siano spazi tra pinza trasportatore orizz (es. 73338 PINZA_TRASPORTATORE_ORIZZ ecc ecc). In questo caso ti conviene usare la strtok() come consigliato sopra.
  • Re: In una riga di file con varie stringhe e numeri, salvare l'ultimo numero intero

    Una volta distinte le varie righe, per suddividere poi ciascuna riga, come tu vuoi fare, si potrebbero utilizzare le funzioni e (quest'ultima già segnalata da M.A.W. 1968).
    Per assegnare le parti di stringa nelle distinte variabili, userei la funzione .

    Di seguito un mero esempio:
    #include <stdio.h>
    #include <string.h>
    
    
    int main() {
    
          const char s[] = "31101B0100 VITE A TESTA CILINDRICA UNI 5931 - M4X10 2";
          const char ch = ' ';
          char *rit;
          int i, j;
          char prima[16], seconda[64];
    
          rit = strchr(s, ch);
          i = strlen(s) - strlen(rit);
          snprintf(prima, i+1,"%s", s);
    
          rit = strrchr(s, ch);
          j = strlen(s) - i;
          snprintf(seconda, j - strlen(rit), "%s", s + i+1);
    
    /* Verifica dei risultati */
          printf("%s\n", prima);
          printf("%s\n", seconda);
       
          return (0);
    
    }
Devi accedere o registrarti per scrivere nel forum
10 risposte