2017-09-18 5 views
2

Je me donne un fichier de configuration qui ressemble à ceci par exemple:Meilleure façon de lire ce fichier pour le manipuler plus tard?

Start Simulator Configuration File 
Version/Phase: 2.0 
File Path: Test_2e.mdf 
CPU Scheduling Code: SJF 
Processor cycle time (msec): 10 
Monitor display time (msec): 20 
Hard drive cycle time (msec): 15 
Printer cycle time (msec): 25 
Keyboard cycle time (msec): 50 
Mouse cycle time (msec): 10 
Speaker cycle time (msec): 15 
Log: Log to Both 
Log File Path: logfile_1.lgf 
End Simulator Configuration File 

Je suis censé être en mesure de prendre ce fichier et sortie les temps de cycle et de cycle à un journal et/ou un moniteur. Je suis alors supposé extraire des données d'un fichier de méta-données qui me dira combien de cycles chacun d'eux s'exécute (entre autres choses) et puis je suis supposé calculer et consigner le temps total. par exemple 5 cycles de disque dur serait de 75 msec. Les fichiers de configuration et de méta-données peuvent apparaître dans n'importe quel ordre.

Je pense que je vais mettre chaque élément dans un tableau, puis faire défiler en attendant la vérité lorsque les chaînes correspondent (Cela aidera également à détecter les erreurs de fichiers). Le fichier de configuration doit toujours avoir la même taille malgré un ordre différent. Le fichier de métadonnées peut être n'importe quelle taille, donc je me suis dit que je ferais une chose similaire mais dans un vecteur. Ensuite, je vais multiplier les temps de cycle à partir du fichier de configuration par le nombre de cycles dans la chaîne de fichier de métadonnées correspondant. Je pense que la meilleure façon de lire les données du vecteur est dans une file d'attente.

Cela vous semble-t-il une bonne idée? Je comprends la plupart des concepts. Mais mes structures de données sont instables en termes de codage. Par exemple, en lisant des fichiers, devrais-je le lire ligne par ligne, ou serait-il préférable de séparer les int des chaînes pour les calculer plus tard? Je n'ai jamais eu à le faire à partir d'un fichier qui peut changer auparavant. Si je les sépare, devrais-je utiliser des tableaux/vecteurs séparés?

Im en utilisant C++ BTW

Répondre

1

Votre logique devrait être:

  1. Créer deux variables std::map, qui mappe une chaîne à une chaîne, et une autre qui associe une chaîne à un flotteur.
  2. Lisez chaque ligne du fichier
  3. Si la ligne contient :, puis, diviser la chaîne en deux parties:

    3a. La partie A est la ligne commençant à zéro, et 1 moins l'indice du :

    3b. La partie B est la partie de la ligne à partir de 1+ l'index du :

  4. Utilisez ces deux parties pour stocker vos types personnalisés std::map, en fonction du type de valeur.

Maintenant, vous avez correctement lu le fichier. Lorsque vous lisez le fichier meta, vous recherchez simplement la clé dans le fichier de méta-données, utilisez-la pour rechercher la clé correspondante dans vos données de fichier de configuration (pour obtenir la valeur), puis faites n'importe quelle opération mathématique.

+0

merci. Je vais regarder dans la carte, comme je ne l'ai jamais utilisé. Mais cela semble une solution plus facile, merci! – Penrose5833