Domanda

Sono impegnato con la programmazione di una classe che crea un indice da un file di testo ASCII / BINARY. Il mio problema è che non so davvero come iniziare. Ho già avuto alcuni tentativi, ma nessuno ha funzionato davvero bene per me. NON ho bisogno di trovare l'indirizzo del file tramite la MFT. Basta caricare il file e trovare le cose molto più velocemente cercando la chiave nel file indice e andando nel file di testo all'indirizzo che mostra.

Il file indice deve essere compilato come segue:

KEY        ADDRESS  
  1        0xABCDEF    
  2        0xFEDCBA    
  .           .  
  .           .  

Abbiamo un file di testo con il seguente valore di esempio:

1, 8752 FW,
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++, 
******************************************************************************, 
------------------------------------------------------------------------------;

Spero che questo spieghi un po 'meglio la mia domanda. Grazie!

È stato utile?

Soluzione

Mi sembra che tutto ciò che la tua classe deve fare è memorizzare un array di puntatori o offset di inizio file nelle posizioni chiave nel file.

Dipende molto da ciò che rappresentano le posizioni chiave.

Suggerirei di accedere al file attraverso la tua classe usando alcuni metodi pubblici. È quindi possibile legare più facilmente in posizioni chiave con i dati scritti.

Ad esempio, le posizioni delle chiavi potrebbero essere da dove inizia ogni nuovo blocco di dati scritto nel file. per esempio. primo blocco 1000 byte, posizione chiave 0; secondo blocco 2500 byte, posizione chiave 1000; terzo blocco 550 byte; posizione chiave 3500; il blocco successivo sarà 4050 tutti supponendo che 0 sia il primo byte.

Memorizza i valori della chiave in un array di lunghezza variabile e quindi puoi recuperare facilmente il punto iniziale per un blocco di dati.

Se il tuo punto chiave è indicato da un carattere chiave, puoi usare la stessa classe, ma con una leggera modifica per memorizzare dove è memorizzato il valore chiave. Il modo più semplice è quello di scorrere i dati fino a quando non viene individuato il personaggio chiave, contando il numero di caratteri controllati mentre si procede. Il conteggio viene quindi utilizzato per produrre la posizione chiave.

Altri suggerimenti

Il tuo frammento di codice non è tanto un'idea, ma è la funzionalità che desideri avere alla fine.

Riconosci che " indicizzazione " significa semplicemente "ricordare" dove si trovano le cose. Puoi farlo utilizzando qualsiasi struttura di dati desideri ... B-Tree, Red / Black tree, BST o strutture più avanzate come suffisso / array di suffissi.

Ti consiglio di esaminare tali strutture di dati.

modifica:

con le nuove informazioni, suggerirei di cercare la tua chiave / valore. Costruisci un array di chiavi e associa i loro valori in qualche modo. questo può significare la costruzione di una classe o struttura che contiene sia la chiave che il valore, oppure contiene la chiave e un puntatore a una struttura o classe con un valore, ecc.

Al termine, ordinare l'array di chiavi. Ora hai la possibilità di effettuare una ricerca binaria sulle chiavi per trovare il valore appropriato per una determinata chiave.

Puoi creare una tabella hash in un modo simile. potresti costruire un BST o una struttura simile come ho detto prima.

Ancora non capisco davvero la domanda (lavoro sulla tua domanda che richiede skillz), ma per quanto posso dire l'algoritmo sarà:

  1. scansiona il file in modo lineare, il primo valore fino alla prima virgola (',') è una chiave, probabilmente. Tutte le altre chiavi si verificano ovunque un ';' si verifica, fino al successivo ',' (potrebbe essere necessario saltare le interruzioni di riga qui). Se si tratta di un compito a casa, basta usare scanf () o qualcosa del genere per leggere la chiave.
  2. stampa la chiave e la posizione in byte in cui l'hai trovata nel tuo file indice

AFAIUI questo è l'algoritmo, non vedo davvero il problema qui?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top