Je suis nouveau au Parsec
. Apprécierez les pointeurs pour le problème ici. Dites, j'ai un fichier csv avec un nombre fixe d'en-têtes. Au lieu d'analyser chaque ligne séparément, je voudrais chercher un jeton au début de la ligne, et obtenir toutes les lignes jusqu'à la ligne suivante avec un jeton non vide. Exemple ci-dessous:Comment analyser plusieurs lignes avec des jetons de début et de fin dans Parsec
token,flag,values
a,1,
,,a
,,f
b,2,
Règle pour une entrée valide est: si le champ jeton est rempli, obtenir toutes les lignes jusqu'à champ suivant jeton non vide. Alors, je vais vous Parsec
pour obtenir plusieurs lignes ci-dessous comme première entrée (ces multiples lignes peuvent ensuite être analysées par une autre règle):
a,1,
,,a
,,f
Ensuite, le processus recommence sur la ligne suivante avec le champ symbolique non vide (dernière ligne dans l'exemple ici). Ce que j'essaie de comprendre, c'est s'il existe un moyen simple de spécifier la règle comme cela dans Parsec
- obtenir toutes les lignes qui répondent à une certaine règle. Ils pourraient ensuite être remis à un autre analyseur. Fondamentalement, il ressemble à une sorte de règle lookahead
pour spécifier ce qui est une entrée multi-ligne valide. Ai-je bien compris? Nous pouvons ignorer le séparateur de virgules ci-dessus pour le moment, et dire qu'une entrée commence lorsqu'un caractère est trouvé au début d'une ligne, et se termine lorsqu'un caractère est trouvé au début d'une ligne.
Il semble que vous pourriez juste faire quelque chose comme 'nonEmptyTokenField *> many1 emptyTokenField'. – user2407038
@ user2407038, merci pour le pointeur. C'était très utile pour résoudre le problème. Simple et efficace. Je posterai une solution que j'ai écrite avec votre pointeur. – Sal