2011-09-30 5 views
0

D'accord, ce peut-être le plus simple (ou stupide) question, mais je dois savoir ...Insertion de texte dans un fichier texte

Supposons que je dispose d'un fichier texte contenant aucun compte. et l'équilibre. J'écris un programme pour rechercher le fichier en utilisant le numéro de compte entré. et mettez à jour le champ de solde dans le même fichier texte avec une nouvelle balance. Je trouve cela étonnamment difficile de le faire en utilisant des flux de fichiers. Le problème est que j'essaie d'écraser la chaîne balance dans le fichier texte avec une nouvelle chaîne balance. Donc, si la balance est de 1000 (4 chiffres), je peux l'écraser avec une autre chaîne de 4 chiffres. Mais, si la nouvelle chaîne d'équilibre est plus de 4 chiffres, elle écrase les données après le champ d'équilibre (c'est un simple fichier texte attention à vous ...). Par exemple, si le fichier texte contient

Acc. No.   balance 
123456   100 
123567   2500 

Les champs sont séparés par le caractère TAB \ « t » et enregistrement suivant est séparé par un saut de ligne « \ n ». Si j'entre nouveau dépôt de 200000 pour le compte 123456, la fonction fwrite() écrase les données dans le fichier texte ...

Acc. No   Balance 
123456   2001003567   2500 

Vous pouvez remarquer que le « \ n » après le champ de l'équilibre, et 2 chiffres des prochains comptes 'acc. non. est écrasé.

Bien sûr, personne ne veut que ça arrive :) Ce que je besoin est un moyen de insérer texte dans ce fichier, pas seulement écrasera il. Il y a beaucoup de résultats en utilisant Java, python ou même SED, mais rien en utilisant les flux FILE. S'il vous plaît partagez vos pensées ... merci.

Répondre

0

Si vous voulez vraiment gérer vos données dans un fichier texte brut:

Pendant que vous lisez le fichier, écrire une version modifiée de vos données dans un fichier temporaire, puis supprimez le fichier d'origine et renommer le fichier temporaire au nom de fichier d'origine. Mais attention, aucun autre processus n'accède simultanément au même fichier.

Des systèmes de base de données ont été inventés à de telles fins. Je recommande donc de gérer vos données dans une table de base de données et de créer dynamiquement un rapport de texte si nécessaire.

+0

Mais ne perdra-t-il pas la date de modification/création de fichier d'origine? Je veux dire, ce n'est pas un problème pour moi, mais les systèmes de bases de données doivent avoir besoin de cette information de date, n'est-ce pas? – aditya

+0

Un système de base de données en soi n'a pas besoin d'une telle information de date. C'est à vous de concevoir votre base de données en conséquence. Par exemple. vous pouvez inclure une colonne dans votre table contenant l'horodatage de la dernière modification. – vanje

+0

Comme conseillé par _Vanje_, j'ai créé un fichier temporaire, je l'ai édité, puis j'ai supprimé l'original. Je n'ai pas aimé, mais ça a marché :). Mais oui, je pense que l'approche de la base de données est définitivement plus efficace. Mais encore hoe _database_ fait en premier lieu ..., ils doivent aussi utiliser les fichiers. Quoi qu'il en soit ... thnks les gars – aditya

1

Vous devrez d'abord déplacer toutes les données après le point d'insertion de quelques octets. C'est ce que font également Java, sed ou python, s'ils n'écrivent pas un fichier temporaire pour commencer.

+0

Vous voulez dire que je dois lire toutes les données dans un tampon, écrire mes données, puis réécrire toutes les données lues dans le fichier. Il n'y a aucun moyen d'insérer des données entre les données existantes? – aditya

+0

Vous n'avez pas besoin de les garder en mémoire tout le temps, vous pouvez sauter à la fin du fichier, lire un morceau, l'écrire quelques octets plus tard, lire un morceau, etc. Cependant, oui, vous devez déplacer les données physiquement, d'une manière ou d'une autre. – thiton

Questions connexes