Nasıl "yeni bir çizgi" değiştiririm

4 Cevap php

Tamam, ben böyle bir csv dosyası var:

14 ; 1234,56 ; 10203 ; "ABC" ; "DFG" ; "Lorem \n ipsum \n dolor sit" \n
15 ; 234,16 ; 10204 ; "ABC" ; "DFG" ; "Lorem \n ipsum \n dolor sit" \n
16 ; 1234,15 ; 10304 ; "CCC" ; "DFG" ; "Lorem ipsum/dolor \n sit amet\consec" \n

ve böylece ...

The file has almost 550000 lines. How do I replace all \n characters inside double quotes at once?

PHP 5 kullanıyorum. Onu (preg_replace tarafından yapılabilir mi?)

4 Cevap

Eğer fgetcsv() kullanıyorsanız eğer ben bilmiyorum, ama sen alıntı bilgiler dahil olmak üzere bireysel alanlarını tanımak için yapılandırabilirsiniz.

Bir anda biriyle satırları okumak ve yerine tek seferde büyük bir dosya üzerinde pahalı bir RegEx operasyon yapmak zorunda daha alan seviyesinde yeni satır karakterlerini şerit bu şekilde.

Biraz belgelerine (';' ile değiştirilmiştir ayraç) php kod örneği değiştirilmiştir:

$row = 1;
$handle = fopen("data.txt", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
	$num = count($data);
	echo "<p> $num fields in line $row: <br /></p>\n";
	$row++;
	for ($c=0; $c < $num; $c++) {
		echo $data[$c] . "<br />\n";
	}
}
fclose($handle);

data.txt

14 ; 1234,56 ; 10203 ; "ABC" ; "DFG" ; "text 
 text 
 more text"
15 ; 234,16 ; 10204 ; "ABC" ; "DFG" ; "text 
 text 
 more text"

fgetcsv() alanının bir parçası değil, ilave veri hatları gibi tırnak içinde yeni satır karakterleri tanımıyor, çünkü bu 2 satır yerine 6 olarak kabul edilecektir.

Yani aslında bazı satırlarda dize '\n' (yeni satır karakteri) var mı? Eğer öyleyse, sadece yeni satır karakteri kaçmak gerekir:

str_replace("\\n", "*foo*", $csv)

// this will make the following change:
14 ; 1234,56 ; 10203 ; "ABC" ; "DFG" ; "text \n text \n more text" \n
// that to this:
14 ; 1234,56 ; 10203 ; "ABC" ; "DFG" ; "text *foo* text *foo* more text" \n

PHP CSV dosyalarını okumak için, belirli bir işlevi vardır: fgetcsv ();

Ben çok iyi yani ben, php csv açmak için hızlı bir senaryo yazmak dosyası (php5 yerleşik fgetcsv) okumak ve yazmak bir süre dönüşüm arıyorsanız varsayarak, son derece karmaşık regex yıllardan tecrübeli değilim (fputcsv) yeni bir dosya içine satır satır satır karakterlerini str_replace'ing ederken.

(Ben stackoverflow üzerinde canavar regex seyir için değilse, yani.)