Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2008, 18h30   #1
Membre habitué
 
Avatar de arcane
 
Inscription : avril 2003
Messages : 234
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 234
Points : 107
Points : 107
Par défaut Structure d'un fichier dbase

Bonjour,

j'ai un fichier dbase que je ne peux pas lire via php, et en fait en regardant l'entete du fichier,
je constate que les offset et la longueur du premier champ est incorrect :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
$colonnes = dbase_get_header_info($base_BIL_FAB);
  echo "colonnes 0 name : " . $colonnes[0]['name'] . " <br />\n";
  echo "colonnes 0 type : " . $colonnes[0]['type'] . " <br />\n";
  echo "colonnes 0 length : " . $colonnes[0]['length'] . " <br />\n";
  echo "colonnes 0 precision : " . $colonnes[0]['precision'] . " <br />\n";
  echo "colonnes 0 format : " . $colonnes[0]['format'] . " <br />\n";
  echo "colonnes 0 offset : " . $colonnes[0]['offset'] . " <br />\n";
  echo "colonnes 1 name : " . $colonnes[1]['name'] . " <br />\n";
  echo "colonnes 1 type : " . $colonnes[1]['type'] . " <br />\n";
  echo "colonnes 1 length : " . $colonnes[1]['length'] . " <br />\n";
  echo "colonnes 1 precision : " . $colonnes[1]['precision'] . " <br />\n";
  echo "colonnes 1 format : " . $colonnes[1]['format'] . " <br />\n";
  echo "colonnes 1 offset : " . $colonnes[1]['offset'] . " <br />\n";
...
Resultat :

Citation:
colonnes 0 name : DATE
colonnes 0 type : date
colonnes 0 length : 5384
colonnes 0 precision : 0
colonnes 0 format : %5384s
colonnes 0 offset : 1
colonnes 1 name : LIBELLE
colonnes 1 type : character
colonnes 1 length : 7
colonnes 1 precision : 0
colonnes 1 format : %-7s
colonnes 1 offset : 5385
alors que sur la premiere colonne (0) je dois avoir lenght=8, format=%8s
et la 2eme colonne (1) : l'offset à 9 (1+8) (début de colonne)

du coup, je ne peux pas lire ce fichier.
si je l'ouvre sous excel et que je l'enregistre, ca marche. (j'ai d'autres fichiers qui n'ont pas ce pb)
mais ce fichier est recréé chaque jour avec ces erreurs.
et je voudrais le lire sans avoir à l'ouvrir.

les fonctions dbase_get_record_with_names et dbase_get_record me retournent une erreur :
Citation:
Notice: Undefined index: DATE in C:\www\traitement_quotidien.php on line 215
comment peut on modifier la structure du fichier? (forcer les longueurs et offset de colonnes)

ou alors, définir l'offset de la colonne à lire (apres, par ex. pour la 2eme colonne je ne sais pas si elle commence à 9 ou 5385)
pour les fonctions dbase_get_record_with_names et dbase_get_record

ou alors, serait il possible dans le script php d'ouvrir excel, d'ouvrir ce fichier dedans, et de l'enregistrer au format dbase? (sans rien modifier)

Merci

[edit]
si j'ouvre ce fichier avec un autre outil, (DBF Viewer par ex.) les descriptions du fichier sont correctes
[/edit]
arcane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 08h42   #2
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
Juste pour info, en regardant la doc php, la fonction dbase_get_header_info renvoi :
Citation:
length : Le nombre d'octets que cette colonne peut contenir
Le nombre d'octets, pas de caractères...

Je sais pas si ça peut t'aider...
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2008, 15h44   #3
Membre habitué
 
Avatar de arcane
 
Inscription : avril 2003
Messages : 234
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 234
Points : 107
Points : 107
Bonjour,

je n'avais effectivement pas vu ce détail.

En fait, je ne peux pas le lire en tant que dbf, donc ce que je fais, je lis un fichier binaire,
par octets justement, et je recalcule mon offset pour chaque ligne (qui lui est correct)
et je recrée un fichier lisible à coté.

Merci

[edit]
l'offset dont je parle est celui calculé manuellement correspondant au fichier binaire
[/edit]
arcane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h52.


 
 
 
 
Partenaires

Hébergement Web