Je voudrais trouver et remplacer les dates dans un fichier CSV dans les conditions suivantes:Perl RegEx - Rechercher et remplacer chaîne répétée
1) La première à colonnes sont vides, comme « », « »,
1a) $ cas [1] ne doit pas correspondre à cause du texte dans les deux premières colonnes
2) Chacune des 6 colonnes suivantes peuvent contenir des dates, comme dans le cas de $ [0] ci-dessous
2a $ case [2] ne doit pas correspondre puisque les 6 colonnes sont vides
my @case = (
'"","","","1/2/2012","","","","",="12345678"',
'"Add","New","1/1/2012","1/2/2012","","","",""="0987654"',
'"","","","","","","","",="91234567"'
);
J'ai utilisé le code suivant, mais il correspond à tort $ cas [2] et les effets d'efficacité de script:
my $argFind = (qr/^"","",("[\d\/]*",){6}(.*)/);
$replace = '"","","","","","","","",';
if (grep(/$argFind/,@case))
{
s/$argFind/$replace$2/ for @case;
#write file
}
Le résultat final devrait être comme:
$case = [
'"","","","","","","","",="12345678"',
'"Add","New","1/1/2012","1/2/2012","","","",""="0987654"',
'"","","","","","","","",="91234567"'
];
Exigence 2: L'une des 6 colonnes peut contenir des dates, mais au moins une d'entre elles le devrait. Tous ces exemples que je voudrais corriger: '" "," "," 1/1/11 "," "," "," "," "," "' ' ' "", "", " "," 1/2/13 "," "," 4/3/2010 "," "," "' '" "," "," "," "," "," "," ", "1/3/2012" ' – hackbac
J'écrivais un programme équivalent en utilisant' Text :: CSV' mais il a attiré mon attention sur le fait que vos données soient étranges en CSV. La fin des chaînes est soit '" ", =" 12345678 "' ou '" "," "=" 0987654 "'. Est-ce que l'un ou l'autre est correct? S'il vous plaît, expliquez. – Borodin
Je me rends compte maintenant que vous avez déjà votre propre solution de travail, sauf que vous vous inquiétez du coût d'exécution de la substitution sur les enregistrements où tous les huit premiers champs sont déjà vides. S'il vous plaît, oubliez ces doutes. Non seulement cela brise la règle que vous devez écrire pour optimiser la clarté de votre code jusqu'à ce que vous trouviez que votre solution fonctionne trop lentement, mais je suis sûr que cela apportera également une amélioration négligeable des performances - surtout si vous lisez vos données à partir d'un fichier disque. – Borodin