È possibile utilizzare StringBuilder per archiviare e gestire in modo efficiente più variabili di dati?

4

Usando C # Voglio creare uno o più file di testo per memorizzare tutti i dati relativi a una particolare "Cosa" sulla stessa linea. Attualmente mi sto appoggiando a StringBuilder come di seguito.

sb.AppendFormat("{0}{1}{2}{3}{4}{5}{6}{7}"
   , _ThingClass  /* Thing class */ 
   , _ClassType /* Property class type */
   , _Prop0  /* These are generic properties that get manipulated depending on _ThingClass and _ClassType */ 
   , _Prop1        
   , _Prop2  
   , _Prop3   
   , _Prop4
   );

/*
Examples of _ThingClass (Person, Event, Vehicle, Item)
Examples of _ClassType (Teacher, Disaster, Car, Mobile Phone)
Examples of _Prop0-4 (Rachel, Tornado, Fiat, Samsung)
*/

L'idea è di suddividere la stringa su una riga per determinare:

  • Che tipo di Cosa è memorizzato sulla linea (primo valore), e
  • Come gestire gli altri campi * in base a questo valore. (Per esempio: Aggiunta del valore numerico _Prop4 se un 'Heal' _ThingClass o Sottrai se un item "Harm" _ThingClass, Forse anche caricando da, salvando in un file di testo diverso in modo che i file possano avere solo roba del proprio tipo (forse più facile per l'ordinamento).)

Anche se accolgo con favore eventuali frammenti di consigli relativi a ciò, limiterò il focus della domanda e chiedo:

Ci sono casi in cui l'uso di un StringBuilder per strutturare i dati e salvare o caricare da un file sarebbe la strada da percorrere?

PS. Ho trovato il contenuto di " "per essere una possibile alternativa a StringBuilder - ma suppongo che ci possa essere più di un percorso valido.

    
posta Avestron 23.03.2016 - 10:20
fonte

2 risposte

5

Si può usare un StringBuilder per fare questo? Sì.

È possibile utilizzare un martello per inserire le viti nel legno. Sì.

Entrambi sono possibili. Neanche una buona idea.

Ciò che stai descrivendo è una classe che prende una riga di testo e restituisce l'oggetto rappresentato da quella linea. Potrebbe essere una classe Factory o semplicemente una classe "Reader" responsabile del caricamento del file.

Praticamente tutto ciò che viene inserito in un oggetto StringBuilder deve essere nuovamente trascinato di nuovo (come una stringa) prima di poter fare qualsiasi cosa con esso (Sostituisci come eccezione notevole). Quindi, gli StringBuilder sono bravi a mettere insieme le cose; allontanandoli di nuovo (per arrivare ai singoli articoli )? Non così tanto.

Ricorda inoltre che un formato di file "a riga singola" può essere facilmente spostato nel cestino quando si memorizzano elementi di testo immessi dall'utente che possono essi stessi contenere interruzioni di riga.

    
risposta data 23.03.2016 - 13:11
fonte
6

Prima di tutto ciò non ha nulla a che fare con StringBuilder o string.Format . La domanda rimane la stessa indipendentemente dal modo in cui generi le stringhe.

Stai inventando un nuovo formato di serializzazione. Ciò significa che è necessario scrivere il codice di serializzazione e deserializzazione.

Normalmente, questa non è una buona idea perché costa tempo ed è soggetta a errori. Usa qualcosa di read-made come JSON, XML ( XmlSerializer ), BinaryFormatter , protobuf o altri.

Quale sceglierai dipende da quali requisiti hai. Normalmente, scegli quello che causa la minima quantità di manodopera mentre soddisfa tutti i requisiti. Se non sai cosa scegliere, JSON è un buon inizio (facile).

    
risposta data 23.03.2016 - 15:32
fonte

Leggi altre domande sui tag