Dans le nom de fichier " nom " comme '10_m1_m2_const_m1_waves_20_90_m2_waves_90_20_20200312_213048' je dois séparer
'10_m1_m2_const_m1_waves_20_90_m2_waves_90_20' from '20200312_213048'
movefile([confpath,name(without 20200312_213048),'.config'],[name(without 20200312_213048), filesep, name, '.config']);
ne fonctionne pas, car un nombre de "_" est variable.
J'ai donc besoin de déplacer un fichier:
name_sep = split(name,"_");
sep = '_';
name_join=[name_sep{1,1} sep name_sep{2,1} sep .....];
Avez-vous une idée? Merci!
3 Réponses :
Vous pouvez utiliser strfind . Soit si vous avez une clé qui est toujours présente avant ou après le point où vous souhaitez diviser le nom:
idx = strfind(nm,'_'); nm(idx(end-2)+1:end)
Ou si vous savez comment _ la partie que vous voulez avoir:
nm = '10_m1_m2_const_m1_waves_20_90_m2_waves_90_20_20200312_213048'; key = 'waves_90_20_'; idx = strfind(nm,key) + length(key); nm(idx:end)
Dans les deux cas, le résultat est:
"20_20200312_213048"
Merci! Je peux utiliser une deuxième partie =)
regexp pour trouver la position de départ de la séparation: name_sep =
{
[1,1] = 10_m1_m2_const_m1_waves_20_90_m2_waves_90_20
[1,2] = 20200312_213048
}
tel que
name_sep = cell2mat(regexp(name,'(.*)_(\d+_\d+$)','tokens','match'));
tokens : name1 = 10_m1_m2_const_m1_waves_20_90_m2_waves_90_20 name2 = 20200312_213048
ce qui donne
ind = regexp(name,'_\d+_\d+$'); name1 = name(1:ind-1); name2 = name(ind+1:end);
@Fracture De rien! Si vous pensez que ma réponse est utile, n'hésitez pas à voter pour / accepter, merci!
Tant que l'horodatage est toujours à la fin de la chaîne, vous pouvez utiliser strfind et compter à rebours à partir de la fin de la chaîne:
name = '10_m1_m2_const_m1_waves_20_90_m2_waves_90_20_20200312_213048';
udscr = strfind(name,'_');
name_date = name(udscr(end-1)+1:end)
name_meta = name(1:udscr(end-1)-1)
name_date =
'20200312_213048'
name_meta =
'10_m1_m2_const_m1_waves_20_90_m2_waves_90_20'
Comment identifier le bon endroit pour couper? Est-ce toujours le 12e _ ? Je suis sûr que les expressions régulières fonctionneront, mais nous devons d'abord comprendre le modèle.
_? La queue est-elle toujours du modèleQue diriez-vous de trouver l'avant-dernier trait de soulignement? Cela fonctionnerait-il? Comment définissez-vous l'endroit où couper?
@Daniel non, c'est le problème. Parfois, il appelle comme '1_m1_waves_20_90_20200311_203018' donc sa variable
@Chris Luengo mais comment? la pièce "20200312_213048" a toujours le même format: AAAAMMJJHHMMSS Comment définissez-vous l'endroit où couper? - c'est un deuxième soulignement "_" avant la fin