Question

J'ai un fichier texte très important, et mes besoins de programme iPad pour remplacer occasionnellement une seule ligne de données (nouvelle ligne: « \ n »). Comment puis-je faire cela efficacement? La rédaction du dossier complet à la fois est pas une option.

Je me suis renseigné sur NSFileHandle, et il semble que cela va faire ce que je veux; en ce moment je vais avoir du mal à trouver comment trouver la ligne X, puis le remplacer par les données d'une chaîne. Je pense qu'après cela fait, tout besoin I de faire est d'appeler synchronizeFile, droit?

Je vous remercie de votre aide!

Était-ce utile?

La solution

Vous ne pouvez pas vraiment faire cela sans écrire le fichier entier. Vous pouvez chercher au début de la ligne, puis écrire la nouvelle ligne. Mais d'abord, il faudrait savoir le décalage de cette ligne. Si vous ne l'avez pas déjà que ce moyen de lire le fichier depuis le début de cette ligne. Ensuite, vous pouvez écrire la nouvelle ligne, mais seulement si elle est exactement la même longueur que la ligne d'origine. Si elle est plus longue, il écrasera la ligne suivante - il n'y a aucun moyen d'insérer des données dans un fichier. Si la nouvelle ligne est plus courte que l'ancienne la fin de l'ancienne ligne restera. La même exigence de longueur est aussi délicate. Cela signifie la même longueur en octets. En fonction du codage de caractères des caractères peut nécessiter plus d'octets que d'autres.

Si vous avez vraiment besoin de le faire et le faire travailler pour presque tous les cas, vous auriez à utiliser ces étapes:

  1. Lire le fichier entier pour trouver le décalage de la ligne que vous êtes intéressé par
  2. Recherche du décalage de la ligne
  3. Ecrire la nouvelle ligne
  4. Ecrire le reste du fichier que vous lisez à l'étape 1.

Cet algorithme fonctionne, peu importe combien de temps ou court-circuiter les lignes sont ou comment ils sont codés. Mais ce sera probablement plus cher que simplement écrire le fichier entier, surtout si vous avez en mémoire de toute façon.

Avez-vous déjà vérifié qu'il est inacceptable d'écrire le fichier entier ou faites-vous l'optimisation prématurée ici? Si votre fichier texte est vraiment grand, vous devriez considérer une base de données, comme SQLite, ou d'utiliser des données de base.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top