Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] ordinare un file di testo

    Ciao a tutti. Sono nuovo in questo forum, ho cominciato a programmare in C++ all'Universita' ma poi,causa lavoro non attinente, non ne ho piu' avuto tempo. Quindi sono fermo da un paio d'anni. Scusate quindi eventuali domande ingenue. Veniamo al mio problema.

    Avrei la necessita' di acquisire un file di testo del tipo riportato qui sotto (sono log di un server Blackberry, ovviamente questo e' un estratto, se dovesse servire vi posso inviare il file intero.

    [SIZE=1][I][40000] (09/06 14:32:31):{0x2238} [DIAG] EVENT=Thread_report, THREADID=0x2238, THREADNAME="DebugLogger"
    [30145] (09/06 14:32:32):{0x2060} Starting BlackBerry Manager - Version 4.0.0.110
    [30146] (09/06 14:32:32):{0x2060} Initializing the MailboxManager with profile BlackBerryServer
    [40206] (09/06 14:32:32):{0x2060} MailboxManager::SubsystemInitialize - Using MAPI profile 'BlackBerryServer'


    L'output deve produrre stringhe ordinate secondo le refid {0xNNNN}. Cioe' prima tutte le stringhe {0x2238},poi tutte le {0x2060} ecc. Queste refid pero' non si conoscono a priori ma si acquisiscono durante le lettura del file.

    Ho pensato quindi di costruire una funzione che conti quante refid diverse sono presenti nel file e ne memorizzi anche i valori.
    In questo modo posso poi costruire un array di puntatori di dimensione [numero di refid], che puntino a liste. Gli elementi di una lista dovrebbero essere le stringhe con la stessa refid.

    PROBLEMA: non conosco la lunghezza delle stringhe che contengono la refid, quindi non saprei come allocare lo spazio per contenerle.

    Riuscite a darmi un parere? Se non sono stato abbastanza chiaro fatemi sapere!

    Grazie mille.

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    alloca un array sufficintemente grande per contenere le righe. oppure scorriti la riga carattere per carattere fino a trovare il carattere di fine linea, quindi torni indietro nel file, ti allochi l'array della dimensione giusta e leggei la riga.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Ti ringrazio della pronta risposta. A dire la verita' ci avevo pensato ma non volevo fare il lavoro 2 volte per ogni riga, perche' i file sono MOLTO lunghi. Per quanto riguarda assegnare una dimensione massima fissa, non volevo farlo per non sprecare memoria, appunto perche' i file sono lunghi. Quindi direi che devo arrivare a un compromesso: spreco memoria ma impiego meno tempo oppure non spreco memoria ma impiego piu' tempo. Giusto? Non si puo avere tutto...

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    ti stai preoccupando delle prestazioni e della memoria prima ancora di aver iniziato ascrivere il codice senza neanche sapere se veramente c'è un problema di prestazioni

    Se scegli di utilizzare un array di dimensione fissa per le righe devi allocare un solo array in cui di volta in volta in volta leggi la riga, poi la esamini per estrapolare la sottostringa che ti serve che inserirai in un vettore mantenendo l'ordinamento.

    Quindi per quanto lunhge possano essere le righe del file non c'è spreco di memoria. Se ad esempio le righe non sono più lunghe di 1000 caratteri puoi utilizzare un array di 1000 char, che non è nemmeno 1 KB...

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.