SplFileObject::getCsvControl

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

SplFileObject::getCsvControl β€” ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ символы раздСлитСля, ограничитСля ΠΈ экранирования CSV-ΠΏΠΎΠ»Π΅ΠΉ

ОписаниС

public function SplFileObject::getCsvControl(): array

ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»Π΅ΠΉ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ символ экранирования для CSV-ΠΏΠΎΠ»Π΅ΠΉ.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ содСрТит ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

ΠœΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСксный массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит символы раздСлитСля, ограничитСля ΠΈ экранирования.

Бписок измСнСний

ВСрсия ОписаниС
7.4.0 ΠŸΡƒΡΡ‚ΡƒΡŽ строку Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ символ экранирования.
7.0.10 Π’ массив с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ символ экранирования.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ получСния символов раздСлитСля, ограничитСля ΠΈ экранирования ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ SplFileObject::getCsvControl()

<?php

$file
= new SplFileObject("data.txt");
print_r($file->getCsvControl());

?>

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π°:

Array
(
    [0] => ,
    [1] => "
    [2] => \
)

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • SplFileObject::setCsvControl() - УстанавливаСт символы раздСлитСля, ограничитСля ΠΈ экранирования для CSV-ΠΏΠΎΠ»Π΅ΠΉ
  • SplFileObject::fgetcsv() - ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ строку ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ указатСля ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎ CSV-полям
  • SplFileObject::fputcsv() - ЗаписываСт массив ΠΏΠΎΠ»Π΅ΠΉ ΠΊΠ°ΠΊ CSV-строки
  • fputcsv() - Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ строку Π² CSV-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈ записываСт строку Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
  • fgetcsv() - ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ строку ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ указатСля ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎ CSV-полям
  • str_getcsv() - Π Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ CSV-строку Π² массив
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 3 notes

up
27
greg dot bowler at g105b dot com ΒΆ
11 years ago
Note that this function does not magically guess the CSV control from a given file, rather it returns what has been priorly set with SplFileObject::setCsvControl().
up
1
faure dot daniel dot 57 at gmail dot com ΒΆ
4 years ago
Given an absolute path to a CSV or any text file and a list of possible delimiters and assuming lines are up to 4096 characters long, I use

<?php 
function guess_delimiter($file, $delimiters=[',',';']) 
{
  $h = fopen($file,'r');
    $count = [];
    foreach ($delimiters as $del) {
      $count[$del] = 0;
      while (($bufer = fgets($h, 4096)) !== false) {
        $count[$del]+=substr_count($bufer, $del);
      }
      rewind($h);
    }
    fclose($h);
    return array_search(max($count), $count);
}
up
1
Anonymous ΒΆ
12 years ago
Seems that this function always returns the same delimiter.

<?php
file_put_contents("A;B;C;D\n0;0;0;0", "test.txt");

$file = new SplFileObject("test.txt"); 
var_dump($file->getCsvControl());
?>

array(2) {
  [0]=>
  string(1) ","
  [1]=>
  string(1) """
}