/ / Fichier de texte complexe en C ++ IO - c ++, analyse, fstream

Fichier de texte complexe C ++ IO - c ++, analyse, fstream

Je veux créer un programme réutilisable qui créeun test aléatoire à choix multiple à partir d'un fichier texte. Le fichier texte contiendrait la question, la réponse et d’autres réponses incorrectes. Je souhaite que le programme recherche les mots-clés qui identifient des parties du fichier texte. Voici comment le fichier texte est maintenant (l'exemple est pour un test d'anatomie osseuse):

Q0 "What bone is the supraorbital foramen found on?" [Frontal Bone]
Q1 "What bone is the Sella Turcica found on?" [Sphenoid Bone]
Q2 "What bone is the Crista Galli found on?" [Cribriform Plate]
Q3 "What bone is the Foramen Magnum found on?" [Occipital Bone]
Q4 "What bone is next to the Ulna?" [Radius]

W0 <Frontal Bone>
W1 <Sella Turcica>
W2 <Carpals>
W3 <Temporal Bone>
W4 <Femur>
W5 <Ulna>
W6 <Sphenoid Bone>
W7 <Crista Galli>
W8 <Cribriform Plate>
W9 <Mandible>
W10 <Radius>
W11 <Foramen Magnum>
W12 <Occipital Bone>
W13 <Leg>
W14 <Arm>

Q0 signifie la question 0. Ce qui est à côté des guillemets est la question, la réponse est entre parenthèses. W0 et on est le mot banque, ce qui représente d'autres réponses potentielles. Je pense que ce dont j'ai besoin s'appelle un analyseur. Je suis toujours un débutant, en quelque sorte. J'ai juste besoin de savoir comment obtenir le programme pour lire ce fichier et l'afficher correctement. Je ne demande pas que le programme soit écrit pour moi, je veux juste des conseils pour faire un analyseur avec ce format.

Réponses:

1 pour la réponse № 1

Commencez par vous occuper des structures de données - c’est une bonne pratique. Comme vous le voyez, il existe peut-être ces structures:

map<string, int> answers;

struct question {
int id;
string text;
int answer;
}

list<question> questions;

Comme vous le voyez, il est préférable de placer les réponses dans le fichier avant les questions. Pourquoi? Parce que vous pouvez écrire un programme de cette manière:

  1. Analyser les réponses et remplir answers carte.
  2. Analyser la question et remplir questions. Il suffit de mettre un numéro de réponse dans answers[answer_string] pour obtenir un numéro de réponse correspondant.

Maintenant, vous avez tout pour créer un algorithme. Voyons comment fonctionne généralement un analyseur simple pour ce cas:

  1. Ignorer tous les espaces
  2. Lire un symbole s. Si s == "W" puis lisez un numéro de réponse. Sinon si s == "Q" lire un numéro de question.
  3. Si s == """ lire une question "chaîne jusqu'à la prochaine" "".
  4. Si s == "[" lire une chaîne de réponse à une question jusqu'à "]".
  5. Si s == "<" lire une réponse "chaîne de caractères jusqu'à"> ".

Utilisez simplement ces règles et vous obtiendrez un algorithme d'analyse récursive. En outre, il serait bon de lire à propos de analyseurs récursifs de descente pour plus de détails.

C'est tout! Vous avez des structures de données et un algorithme. Maintenant, vous pouvez écrire du code.

Et pourquoi ne pas utiliser un numéro pour répondre à la question plutôt que de la chaîne pour réduire les doublons? :-)


0 pour la réponse № 2

Si j'étais vous, j'utiliserais un format XML plutôt qu'un fichier texte. Il existe déjà plusieurs analyseurs XML gratuits sur le marché, vous n'avez donc pas besoin d'écrire beaucoup de code d'analyse.

Un autre avantage est que si vous décidez plus tard de modifier le format, il est plus facile de réécrire l'analyseur.

Le troisième avantage est que vous obtenez vos questions et vos réponses dans une hiérarchie qui convient très bien aux structures de données.