2015-10-03 54 views
2

我想從使用fgets和substr逐行循環的Isam文件中分離數據,以從正確的行位置獲取正確的數據。PHP:使用substr時刪除多餘的空格

源數據:

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

問題是,SUBSTR不recocnize數據,因此數據的位置是變化的每一行之間的那些多餘的空格。

SUBSTR是「看到」一行:

000000124325424Productname Type Price Weight Unit Unitcode 

有什麼辦法來保護項目之間的空間?

+0

你想要'substr'? – davidkonrad

+0

例如:產品代碼 $ row。= ltrim(trim(substr($ line,0,16)),'0'); –

回答

2

編輯完這個問題後,它打我,你可能正在處理製表符分隔的字符串\t。無論哪種方式,消毒每次試圖用substr()爲所欲爲,字符串:

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

這將去掉多個空白" " =>" ",標籤\t甚至換行符。


或許你可以消毒後發現explode()作爲一個更好的辦法:

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

永遠是第一個項目,即產品代碼沒有多餘的空格。

+0

這是正確的,不是空格,而是標籤。 preg_replace('/ \ s + /','',$ s)不起作用,但只替換了標籤($ line = str_replace(「\ t」,「」,$ line1);)。不管怎麼說,還是要謝謝你! –

+0

@RogerWayne - 奇怪,'/ \ s + /'適合我。看到更新,也許你不需要'substr',畢竟如果你所有的行都有相同的結構。只是一個建議。感謝您接受答案。 – davidkonrad

1

當您在網頁中顯示文本時,Web瀏覽器不會顯示多個空格。試試你的包裹中的文本預格式化標籤,像這樣

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

然後,瀏覽器將顯示的所有空間渲染。

您可以使用查看源...在瀏覽器中對這類問題進行疑難解答。

+0

這是一個給定的 - 但這有助於'substr'完全識別額外的空間......怎麼樣? – davidkonrad