en tcl, comment puis-je remplacer une ligne dans un fichier?
disons que j'ai ouvert un fichier, puis analysé en lignes. Puis-je utiliser une boucle:
foreach line $lines {}
l'intérieur de la boucle, pour certaines lignes, je tiens à les remplacer dans le fichier avec les différentes lignes. Est-il possible? Ou dois-je écrire dans un autre fichier temporaire, puis remplacer les fichiers quand je suis fait?
par exemple, si le fichier contient
AA
BB
puis-je remplacer les lettres majuscules et de minuscules, je veux que le fichier d'origine pour contenir
aa
bb
Merci!
OriginalL'auteur n00b programmer | 2010-05-12
Vous devez vous connecter pour publier un commentaire.
pour les fichiers de texte brut, il est plus sûr pour déplacer le fichier d'origine à une "sauvegarde" nom puis le réécrire en utilisant le nom de fichier d'origine:
Mise à jour le: édité basé sur Donal commentaires
file rename
appels d'abord de déplacer l'ancien fichier de sauvegarde, puis le nouveau fichier pour le nom propre. Ou utiliserfile link -hard
pour faire de la sauvegarde et defile rename -force
pour déplacer le temporaire en place.pourquoi est-ce?
Le but est de garder l'ancien fichier avec l'ancien nom pour aussi longtemps que possible. Avec le hardlink/remplacer approche, le remplacement est atomique (
rename()
est atomique d'exploitation POSIX) et il y a toujours quelque chose en cours de validité avec le contenu, avec pour objectif le nom du fichier. C'est un vieux Unix hacker astuce. 🙂merci pour l'info. Il n'a pas eu lieu pour moi (jusqu'à ce que j'ai regardé les docs juste maintenant) que des liens en dur ont été portables.
documentaion dit "fichier lien ?-linktype? de lien ?cible?". Vous devriez changer les positions de $de sauvegarde et de $filename, pour ressembler à ce "fichier de lien-dur $de sauvegarde $filename".
OriginalL'auteur glenn jackman
En plus de Glenn réponse. Si vous souhaitez utiliser le fichier sur un ensemble de matières de base et le fichier n'est pas trop grande, alors vous pouvez utiliser fileutil::updateInPlace. Voici un exemple de code:
OriginalL'auteur Hai Vu
Si c'est Linux, ça serait plus facile à exec sed -i" et de le laisser faire le travail pour vous.
OriginalL'auteur eemz
Si c'est un court fichier, vous pouvez simplement les stocker dans une liste:
OriginalL'auteur Jack
OriginalL'auteur