Fractionner une chaîne en ignorant les sections entre guillemets

Étant donné une chaîne comme celle-ci :

a,'string, with',divers,'values, and some',quoted

Quel est un bon algorithme pour diviser cela en fonction de virgules tout en ignorant les virgules à l'intérieur des sections citées ?

La sortie doit être un tableau :

[ 'a', 'string, with', 'divers', 'values, and some', 'quoted' ]

请先 登录 后评论

3 réponses

Pat

Bien sûr, utiliser un analyseur CSV est préférable, mais juste pour le plaisir, vous pouvez :

Loop on the string letter by letter.
    If current_letter == quote : 
        toggle inside_quote variable.
    Else if (current_letter ==comma and not inside_quote) : 
        push current_word into array and clear current_word.
    Else 
        append the current_letter to current_word
When the loop is done push the current_word into array 
请先 登录 后评论
Kev

L'auteur ici a laissé tomber une goutte de C

请先 登录 后评论
Martin

Si la langue de mon choix n'offrait pas un moyen de le faire sans réfléchir, j'envisagerais initialement deux options comme solution de facilité :

  1. Pré-analyser et remplacer les virgules dans la chaîne par un autre caractère de contrôle, puis les diviser, suivi d'une post-analyse sur le tableau pour remplacer le caractère de contrôle utilisé précédemment par les virgules.

  2. Vous pouvez également les diviser par des virgules, puis analyser ultérieurement le tableau résultant dans un autre tableau en vérifiant les guillemets principaux sur chaque entrée du tableau et en concaténant les entrées jusqu'à ce que j'atteigne un guillemet final.

Ce sont des hacks cependant, et s'il s'agit d'un pur exercice «mental», je soupçonne qu'ils se révéleront inutiles. S'il s'agit d'un problème réel, il serait utile de connaître la langue afin que nous puissions offrir des conseils spécifiques.

请先 登录 后评论
  • 23 abonnés
  • 0 favoris,461 Feuilleter
  • Community posée à 2023-03-27 15:54