Remplacement dans un fichier texte, précisions ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par michel.leonard, 11 Mars 2012.

  1. michel.leonard
    michel.leonard WRInaute occasionnel
    Inscrit:
    1 Juin 2010
    Messages:
    366
    J'aime reçus:
    0
    Salut, chers WRInautes, la question que je me pose est la suivante:

    Pour chaque utilisateur de mon site acceptant les cookies, je génère un fichier unique dans lequel j'écris touts ses referers, et toutes ses requests. Au début de ce fichier, dans la première ligne, il est écrit le nombre de clics effectués... Question, est-il possible de modifier le nombre de clics dans le fichier sans réécrire la totalité des données... Merci.
     
  2. MikeR
    MikeR WRInaute passionné
    Inscrit:
    9 Janvier 2010
    Messages:
    1 416
    J'aime reçus:
    0
    Tu programmes en quel langage?
    Et tes données, tu les écris en ASCII en mode ligne? Pas en binaire?
    Quel est le format précis de cette première ligne?
     
  3. michel.leonard
    michel.leonard WRInaute occasionnel
    Inscrit:
    1 Juin 2010
    Messages:
    366
    J'aime reçus:
    0
    En fait le programme est en PHP, mais la question clairement est, est-il possible d'effectuer un preg_replace sans réécrire tout le fichier (UTF-8) . Merci
     
  4. MikeR
    MikeR WRInaute passionné
    Inscrit:
    9 Janvier 2010
    Messages:
    1 416
    J'aime reçus:
    0
    Réponse rapide : non, car si par hasard la première ligne mise à jour est plus longue que précédemment, il faudra bien évidemment réécrire tout le fichier à la suite, sinon tu écraseras le début de la deuxième ligne.
    ancienne
    NClicks="9"
    mise à jour,
    NrClicks="10"
    Si tu avais codé cete information en binaire (DWORD), tu aurais la même longueur, et tu pourrais mettre à jour la valeur sans problèms.
     
  5. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    C'est une bonne question, et techniquement parlant si on considère qu'un fichier sur disque est un ensemble ordonné via une FAT (par exemple) de blocs successifs de taille fixe, il ne me semble pas possible de faire un changement de juste quelques octets (qui peuvent par exemple engendrer un décalage de tout ce qui est derrière) sur un unique bloc du dit fichier.

    Certains outil anciens que tu as peut être connu comme PC tools, permettaient de faire un changement de l'ordre de l'octet sur un secteur du disque mais concrètement l'outil réécrivait le secteur complet une fois modifié puisqu'il faisait appel a des fonctions de bas niveau du bios pour écrire (genre BiosDisk(cmd, lecteur, tête, piste, secteur, n_secteur, *tampon) en relation avec l’interruption 0x13 et dispo dans <bios.h>).

    Dans ton cas, si le nombre de clic nécessite un octet pour indiquer le nombre de clic (genre <10 codé en ascii) les données textuels qui suivent seront immédiatement situées derrière, quand tu va passer a plus de 10 clics il faudra deux octets codés ascii pour représenter le chiffre, 3 si tu passe les 99 etc ... bref la portion de fichier concernée stocké sur un des cluster du disque va devoir être réécrite complètement jusqu’à la fin pour compenser le décalage.

    Si tu est dans un logique d'optimisation, il est peut être bon de revoir le système d'encodage de ton fichier pour par exemple le compacter an mettant bout à bout tes informations de façon très condensées et de prévoir un système de décodage / lecture pour les visualiser. Mais dans tous les cas sauf a découvrir un truc que je connais pas (ce qui est très possible), je ne pense pas que tu puisse intervenir a un niveau aussi bas.
     
  6. michel.leonard
    michel.leonard WRInaute occasionnel
    Inscrit:
    1 Juin 2010
    Messages:
    366
    J'aime reçus:
    0
    J'expose a nouveau le problème, j'ai un gros fichier texte, et j'aimerai juste faire un preg_replace... c'est pas grand chose, mais si il faut tout réécrire c'est énorme...
     
  7. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 196
    J'aime reçus:
    1
    ça ne change pas grand chose au fond du problème.
    Maintenant la solution consistant a lire le fichier complet, modifier le contenu via ce que tu veux (comme un preg replace) et le réécrire ensuite au complet semble la seule possible.
     
  8. michel.leonard
    michel.leonard WRInaute occasionnel
    Inscrit:
    1 Juin 2010
    Messages:
    366
    J'aime reçus:
    0
    et en binaire, expliquez moi si possible pourquoi et comment est-il possible de ne pas tout réécrire ? merci
     
  9. MikeR
    MikeR WRInaute passionné
    Inscrit:
    9 Janvier 2010
    Messages:
    1 416
    J'aime reçus:
    0
    Mettons que ton nombre de clics soit 35.
    En mode texte, ce que tu stoques dans ton fichier, c'est la chaine de caractères "35'". Cette chaine est de longueur variable, d'où le problème.

    En mode binaire, ce sont les octets 0x0023 (en supposant un format WORD sur 2 octets).
    Ca veut dire que de 0 à 65535, la place occupée sera toujours de deux octets.
    Donc tu peux ouvrir ton fichier, te positionner sur la variable, la mettre à jour et refermer le fichier, sans aucun problème (un petit peu plus compliqué que ça en pratique mais c'est l'idée).

    En mode texte, tu peux aussi t'en tirer en écrivant une chaine de caractères de longueur constante (prévoir une longueur supérieure à la chaine la plus longue, et en formattant la sortie correctement.
     
  10. michel.leonard
    michel.leonard WRInaute occasionnel
    Inscrit:
    1 Juin 2010
    Messages:
    366
    J'aime reçus:
    0
    je te précise que je suis en php, comment faire pour se plascer sur un octet défini et y écrire une donnée ? merci.
     
  11. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 832
    J'aime reçus:
    246
Chargement...
Similar Threads - Remplacement fichier précisions Forum Date
Remplacement d'un blog par un autre - double emploi Administration d'un site Web 18 Septembre 2016
Outil de remplacement adwords editor AdWords 17 Avril 2015
Remplacement de données variable html Développement d'un site Web ou d'une appli mobile 24 Septembre 2014
surligner un texte et proposer des mots de remplacement Développement d'un site Web ou d'une appli mobile 4 Décembre 2013
Problème avec le remplacement d'un site depuis le GWT Crawl et indexation Google, sitemaps 11 Août 2013
Remplacement separateur ancres URL Rewriting et .htaccess 27 Décembre 2012
pertinence remplacement underscore par trait d'union Référencement Google 23 Juillet 2012
remplacement de parking : location de domaine ? Noms de domaine et référencement 2 Mars 2012
Changement d'url + remplacement du site initial : quelles redirections 301 ? Débuter en référencement 17 Janvier 2012
Remplacement yahoo site explorer Débuter en référencement 21 Novembre 2011
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice