Bonjour,
mon objectif est de générer des fichiers csv dans différents formats pour effectuer des tests. Je les crée en faisant un script PHP car manuellement, ça serait très lourd.
Ma façon de faire : je lis un fichier csv correct, je le modifie pour obtenir le format désiré puis j'enregistre dans un autre fichier.
Un des formats désirés est d'ajouter un encadrement avec des doubles quotes.

Pour faire cela, voici mon script :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
<!-- form to download a csv file from the hard disk -->
<form action="" method="post" enctype="multipart/form-data">
    <label for="file2"><b>File CSV</b></label>
    <input type="file" name="file2" id="file2"><br/>
    <input type="submit" name="submitfile2" value="csv file download"><br/>
    </form>
<?php
if (!defined('DIR_ROOT')) define('DIR_ROOT', dirname(__DIR__).DIRECTORY_SEPARATOR);
 
if (isset($_POST['submitfile2'])) 
{
     if (!$_FILES['file2']["error"]) {   //if not error
        $upload_dir = 'csv';
        $name=$_FILES['file2']['name'];
 
     if ( false === $handle = fopen(DIR_ROOT.$upload_dir.DIRECTORY_SEPARATOR.$name, 'r') )
        throw new Exception("impossible to open the file '$name'");
 
     // one reads the header
     $buffer = 4096;
 
     if ( false === ($header = fgets($handle, $buffer)) )
         throw new Exception("The file '$name' is empty");
 
     // one tests different separators
     $sep = ','; // by default
     $separators = [',', ';'];
 
     foreach ($separators as $separator) {
         if ( strpos($header, $separator)> 0) { 
             $sep = $separator;
             break;
         }
     }
     // --------
	// fermeture du fichier csv
    fclose($handle);
 
     //to read the csv file
 
     if ( false === $handle = fopen(DIR_ROOT.$upload_dir.DIRECTORY_SEPARATOR.$name, 'r') )
     throw new Exception("impossible to open the file '$name'");
 
     $csv_array=[];
     while (false !== ($fields = fgetcsv($handle, $buffer, $sep)) ) {       
        $csv_array[]=$fields;  
    }
          // to build the new csv file, with " enclosure
    if ( false == ($handle2 = fopen(DIR_ROOT.'virguleetdq.csv', 'w')))
        throw new Exception("impossible to open the file '$name'");
 
	// --------
	$delimiteur = ',';
	$enclosure = '"';
	// --------
	// Boucle foreach sur chaque ligne du tableau
	foreach($csv_array as $csv_row)
	{
		fputcsv($handle2, $csv_row, $delimiteur, $enclosure);
	}
	// --------
	// fermeture du fichier csv
	fclose($handle2);
 
    }   //end if not error
}
?>
Quand je lis le fichier csv avec un IDE, je constate qu'il n'a encadré que les chaînes de caractères comportant au moins un espace. C'est normal ?

Voici un exemple (évidemment il ne s'agit que d'un extrait des fichiers complets).
Ficher de départ :
SESAID;ALTERNATEIDS;PLATFORM;PLATFORMOWNER;PUBLISHER;APPLICATIONNAME;HFMCODE;CURRENTLYACTIVE;ACTIVATEDATE
SESA100008;(none);Software Engineering;SESA69723;CollabNet;TeamForge_Full;;TRUE;Jul 26, 2018
Fichier généré :
SESAID,ALTERNATEIDS,PLATFORM,PLATFORMOWNER,PUBLISHER,APPLICATIONNAME,HFMCODE,CURRENTLYACTIVE,ACTIVATEDATE
SESA100008,(none),"Software Engineering",SESA69723,CollabNet,TeamForge_Full,,TRUE,"Jul 26, 2018"