Avec l'indication d'Antoine Millet j'ai pu contourner le problème des multiples signes '=' et même des espaces à l'intérieur des chaînes. Il ne me reste plus qu'à comprendre comment fonctione ce *? car les quelques pages web que j'ai consulté ne sont pas explicites. Je me penche là dessus demain :-)
L'indication "1" de Sylvain Sauvage m'a fait modifier mon code pour utiliser 1ドル et 2ドル. Excellente idée. Pour l'indication "2" soit j'ai mal testé, soit ça ne fonctionne pas dans les cas tordus.
IO.readlines("test.conf").each do |ligne|
if ligne =~ /^\s*[;#]+|^\s*$/
next # sauter les lignes vides (vides, ou espaces, ou tabulations, ou commentaires uniquement)
end
if ligne =~ /^\s*(.*?)\s*=\s*(.*?)\s*[\n]$/
nom, valeur = 1,ドル 2ドル
print "[", nom, "] = [", valeur, "]\n"
end
end
note: comment vous faites pour indenter entre les balises 'code' ?
Ce code fonctionne maintenant pour toutes les situations tordues que j'ai imaginé: avec des espaces à la fin, avec plusieurs signes '=', avec le nom manquant, etc. Le résultat est soit 'nil' soit une valeur correcte.
Je vais maintenant supprimer les commentaires de fin de ligne. Une simple détection de ; et de # suffit en principe. Je vais juste ajouter la possibilité d'avoir un caractère d'échappement et la gestion des guillemets. Inutile pour smb.conf mais pas pour le futur.
Par exemple si je veux un parametre pouvant contenir n'importe quelle chaîne de caractères:
MESSAGE = "## ATTENTION: erreur détectée ; valeur trop élevée ###"
Cet exemple contient ; et #
[^] # Re: manque bang ?!
Posté par Kerro . En réponse au message Expressions régulières. Évalué à 2.
L'indication "1" de Sylvain Sauvage m'a fait modifier mon code pour utiliser 1ドル et 2ドル. Excellente idée. Pour l'indication "2" soit j'ai mal testé, soit ça ne fonctionne pas dans les cas tordus.
IO.readlines("test.conf").each do |ligne|
if ligne =~ /^\s*[;#]+|^\s*$/
next # sauter les lignes vides (vides, ou espaces, ou tabulations, ou commentaires uniquement)
end
if ligne =~ /^\s*(.*?)\s*=\s*(.*?)\s*[\n]$/
nom, valeur = 1,ドル 2ドル
print "[", nom, "] = [", valeur, "]\n"
end
end
note: comment vous faites pour indenter entre les balises 'code' ?
Ce code fonctionne maintenant pour toutes les situations tordues que j'ai imaginé: avec des espaces à la fin, avec plusieurs signes '=', avec le nom manquant, etc. Le résultat est soit 'nil' soit une valeur correcte.
Je vais maintenant supprimer les commentaires de fin de ligne. Une simple détection de ; et de # suffit en principe. Je vais juste ajouter la possibilité d'avoir un caractère d'échappement et la gestion des guillemets. Inutile pour smb.conf mais pas pour le futur.
Par exemple si je veux un parametre pouvant contenir n'importe quelle chaîne de caractères:
MESSAGE = "## ATTENTION: erreur détectée ; valeur trop élevée ###"
Cet exemple contient ; et #