[RESOLU] diviser un tableau de valeurs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] diviser un tableau de valeurs

Re: [RESOLU] diviser un tableau de valeurs

par or 1 » 26 avr. 2021, 23:09

il ne sert à rien de faire 2 boucles, une pour tout mettre dans $TabLog, et une seconde pour parcourir $TabLog.
tout peut se faire à partir de fgetcsv($log,0,';','"','\\')

Re: diviser un tableau de valeurs

par Figuedi » 26 avr. 2021, 23:00

EN fait tu as raison pourquoi ce compliquer ???
ça marche directement en parcourant les deux boucles,
Bon va falloir que je peaufine les résultats,
Mais oui j'uploade le fichier et je l'interprete en direct,

!!!Merci beaucoup !!!
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
$log = fopen('./UP/logfile.csv', 'rb');
//$log = fopen('./toto.txt', 'rb');
$i=1;
while(!feof($log)){
	$TabLog[$i]=fgetcsv($log,0,';','"','\\');
	$i++;
}
$log = fopen('./UP/MotsClefsVivid.txt', 'rb');
//$log = fopen('./toto.txt', 'rb');
$i=1;
while(!feof($log)){
	$TabClefs[$i]=fgetcsv($log,0,';','"','\\');
	$i++;
}
for ($i=1;$i<count($TabLog);$i++){
	for($j=1;$j<count($TabClefs);$j++){
		if (isset($TabLog[$i][3],$TabClefs[$j][0])) {
				if(stristr($TabClefs[$j][0], $TabLog[$i][3])) {
					$result=$result.'//||\\'.$TabLog[$i][0].$TabLog[$i][1].$TabLog[$i][2].$TabLog[$i][3];
				}
		}
	}
}
echo '<br/> j\'ai trouvé : '.$result;

Re: diviser un tableau de valeurs

par Figuedi » 26 avr. 2021, 20:30

Ben non j’ai 392 mots clefs à rechercher dans les 500 000 lignes de boucle for suffisent sur Excel bon avec de la couleur des liens hypertextes et plein d’à cotés mais à la base non deux boucles for me suffisent

Re: diviser un tableau de valeurs

par or 1 » 26 avr. 2021, 19:24

c'est indispensable d'utiliser un bdd ?

Re: diviser un tableau de valeurs

par Figuedi » 26 avr. 2021, 19:03

Fallait s'y attendre,

le fait de diviser le tableau comme tel n'est pas suffisant le serveur plante au bout de 4 minutes

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at [email protected] to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
il a quand meme rentré dans la base 195 000 valeurs et le fait de la relancer lui fait rajouter les memes lignes un seconde fois

il va donc ma falloir découper le script pour que l'utilisateur appuie une fois puis une autre et encore une autre en fonction du nombre d'erreurs #-o #-o #-o


$db = new DataSource();
$conn = $db->getConnection();

$log = fopen('./UP/logfile.csv', 'rb');
//$log = fopen('./toto.txt', 'rb');

$i=1;
while(!feof($log)){
	$TabLog[$i]=fgetcsv($log,0,';','"','\\');
	$i++;
}

$TabLogs=array_chunk($TabLog,100000);

foreach ($TabLogs as $keys){
	foreach ($keys as $val){

		$date = "";
        if (isset($val[0])) {
			$date = mysqli_real_escape_string($conn, $val[0]);
        }
		$type = "";
        if (isset($val[1])) {
			$type = mysqli_real_escape_string($conn, $val[1]);
        }
		$valeur1 = "";
        if (isset($val[2])) {
			$valeur1 = mysqli_real_escape_string($conn, $val[2]);
        }
		$valeur2 = "";
        if (isset($val[3])) {
			$valeur2 = mysqli_real_escape_string($conn, $val[3]);
        }
		$sqlInsert = "INSERT into logs (date,type,valeur1,valeur2)
                   values (?,?,?,?)";
            $paramType = "ssss";
            $paramArray = array(
                $date,
                $type,
                $valeur1,
                $valeur2
            );
		$insertId = $db->insert($sqlInsert, $paramType, $paramArray);    
        if (! empty($insertId)) {
			$type = "success";
            $message = "CSV Data Imported into the Database";
        } else {
            $type = "error";
            $message = "Problem in Importing CSV Data";
        }
	}
}

Re: diviser un tableau de valeurs

par Figuedi » 26 avr. 2021, 17:44

OR1, ton code fait le ARRAY_Chunk, il me divise bien le tableau en plusieurs parties

Il répond bien à la question mais je ne comprznais pas la réponse comme ça

je lm'attendais a avoir besoin d'un tableau dont le nom change tableau1, tableau2, tableau3 et pas tableau[1 ], tableau[2], tableau[3]

Re: diviser un tableau de valeurs

par Figuedi » 26 avr. 2021, 17:41

en fait je suis trop bête,
Tableau[0], contient 100 000 valeurs
Tableau[1], contient les 100 000 suivantes
et ainsi de suite
depuis le debut c'était array_chunk qu'il me fallait
 <?php
$log = fopen('./UP/logfile.csv', 'rb');
$i=1;
while(!feof($log)){
	$TabLog[$i]=fgetcsv($log,0,';','"','\\');
	$i++;
}
$TabLogs=array_chunk($TabLog,100000);
$v=array_keys($TabLogs);
$v me dit le nombre de tableau que j'ai pour découper le traitement en autant de partie que necessaire si ça plante avec 100 000 valeurs je passerai plus petit.
Mais avec tout ça je n'ai pas encore traité la comparaison des chaines entre le tableau mot clef 392 valeurs différentes et les différents tableaux d'erreurs
c'est pas gagné encore

Re: diviser un tableau de valeurs

par or 1 » 26 avr. 2021, 17:25

que fait mon code à cette ligne ?
$TabLog[$j][$i]=fgetcsv($log,0,';','"','\\');

Re: diviser un tableau de valeurs

par Figuedi » 26 avr. 2021, 17:04

merci pour ton code il ne fonctionne pas tel quel comme je le voudrais mais adapté il retombe sur ses pâtes mais comme le ArrayChunk
echo '<pre>'; print_r(array_chunk($TabLog,10));echo '</pre>';
[0] => Array
(
[0] => Array
(
[0] => Thursday,Feb 11 17:11:41,2021
[1] => Error
[2] => xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
)
.......
[9] => Array
(
[0] => Thursday,Feb 11 17:11:44,2021
[1] => Warning
[2] => yyyyyyyyyyyyyyyyyyyy
[3] => zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
)

)

[1] => Array
(
[0] => Array
(
[0] => Thursday,Feb 11 17:11:44,2021
[1] => Warning
[2] => eeeeeeeeeeeeeeeeeeeeeeee
[3] => dddddddddddddddddddddddddddddddddd
)
Mais à la base je ne veux pas ça

j'aimerai
Tableau A0 (10valeurs)
Tableau A1 (les 10 Valeurs d'après)
Tableau A2 (les 10 valeurs suivantes) ....
Il va me falloir peut etre découper à la lecture
lire 10 lignes du tableau les mettre dans un tableau supprimer les 10 premieres lignes et reboucler

Pas insurmontable c'est juste que le nom du tableau dynamique Tableau0, tableau1, tableau2 ne semble pas possible en PHP, et pourtant il me semble bien m'en servir en VBA mais pas sûr sûr non plus

Re: diviser un tableau de valeurs

par or 1 » 26 avr. 2021, 14:04

$j=$i=0;
while(!feof($log)){
if($i > 0 && (($j % 100000) == 0)){
$j++;
$i=0;
}
$TabLog[$j][$i]=fgetcsv($log,0,';','"','\\');
$i++;
}
à débugger.
si cela prend trop de mémoire, ne récupérer que X lignes à la fois plutôt que l'intégralité d'un coup.

Re: diviser un tableau de valeurs

par Figuedi » 26 avr. 2021, 09:02

ah oui j'ai bien essayé array_chunk, qui est censé faire le taf mais non il classe les elements dans le tableau en ajoutant une colonne, mais il ne créé pas un tableau incrémenté
moi j'aimerai
$tableau1 qui contient les 10 premières valeurs de tableau
$tableau2 qui contient les 10 suivantes
....
mais je ne sais pas comment rendre dynamique le nom du tableau

diviser un tableau de valeurs

par Figuedi » 26 avr. 2021, 08:47

Bonjour,

J'ai un tableau avec un nombre de valeurs indéfinies, et je voudrais en faire autant de tableaux que nécessaire de moins de 100 000 valeurs

je charge mon tableau
while(!feof($log)){	
	$TabLog[$i]=fgetcsv($log,0,';','"','\\');  
	$i++;
}
Je compte le nombre d’éléments et donc le nombre de tableaux nécessaires
$nbrElements=count($TabLog);
//$nbrFichiers = (int) ($nbrElements/100000);
$nbrFichiers = (int) ($nbrElements/10);
echo '<br>Nombre de fichiers : '.$nbrFichiers;
//$reste= $nbrElements%100000;
$reste= $nbrElements%10;
if ($reste!=0) $nbrFichiers++;
Et là j'ai une erreur il n'aime pas que je rende dynamique le nom du tableau dynamique le nom du tableau
for ($z=1;$z<=$nbrFichiers;$z++){
	$v=$z*10;
	$vEnd=$v+10;
	for ($v;$v<=$vEnd;$v++){
		$valeur.$z=$TabLog[$v];
	}
}
enfin il dit qu'elle est pas définie.
Notice: Undefined variable: valeur in /home/lesfigueci/www/Logs/importe5.php on line 34