2015-10-03 1 views
2

J'essaie de séparer les données des fichiers Isam en les bouclant ligne par ligne en utilisant fgets et avec substr pour obtenir des données correctes de la position correcte de la ligne.PHP: Espaces supplémentaires supprimés lors de l'utilisation de substr

données Source:

000000124325424Productname Type Price Weight Unit Unitcode 
000000124325324Productname2 Type2 Price2 Weight2 Unit2 Unitcode2 

Le problème est que substr ne recocnize pas les espaces supplémentaires entre les données et donc la position de données est en train de changer chaque ligne.

Substr est la ligne « voir » comme ceci:

000000124325424Productname Type Price Weight Unit Unitcode 

Est-il possible de préserver les espaces entre les éléments?

+0

qu'est-ce que vous essayez de 'substr'? – davidkonrad

+0

Ex: code produit $ row. = Ltrim (trim (substr ($ line, 0,16)), '0'); –

Répondre

2

De toute façon, désinfectez chaque chaîne avant tout ce que vous essayez de faire avec substr():

$s = preg_replace('/\s+/', ' ', $s); 

Cela dépouilleront plusieurs blancs " " =>" ", onglets \t et même des sauts de ligne.


Peut-être que vous pouvez trouver explode() comme une meilleure approche après désinfectante:

explode(" ", str_replace("\t", " ", $line1))[0] 

sera toujours premier élément, i.e. code produit sans espaces supplémentaires.

+0

C'est exact, pas d'espaces mais d'onglets. preg_replace ('/ \ s + /', '', $ s) ne fonctionnait pas mais ne remplaçait que les onglets ($ line = str_replace ("\ t", "", $ line1);) a fait l'affaire. Merci quand même! –

+0

@RogerWayne - Bizarre, '/ \ s + /' fonctionne pour moi. Voir mise à jour, peut-être que vous n'avez pas besoin de 'substr' après tout, si toutes vos lignes ont la même structure. Juste une suggestion. Merci d'avoir accepté la réponse. – davidkonrad

1

Lorsque vous affichez du texte dans une page Web, le navigateur Web n'affiche pas plusieurs espaces en tant que tels. Essayez d'envelopper votre texte dans une balise préformatage, comme si

<pre>000000124325324Productname2 Type2 Price2 Weight2 Unit2 Unitcode2</pre> 

Ensuite, le navigateur le rendre avec tous les espaces représentés.

Vous pouvez résoudre ce genre de problème en utilisant Afficher la source ... dans votre navigateur. Après avoir édité la question, il me semble que vous avez peut-être affaire à une chaîne délimitée par des tabulations \t

+0

C'est un donné - mais cela aide 'substr' à reconnaître des espaces supplémentaires exactement ... comment? – davidkonrad