webForumDet fria alternativet

Sortera upp rader i flera filer

PHP

3 svar · 852 visningar · startad av jwradhe

Medlem sedan juni 2002711 inlägg
Frågan#1

Hej! Har ett litet problem som jag fastnat lite på, har ett antal rader som jag vill dela upp på flera filer, men får inte riktigt till det i min kodning

Vi säger att det är 100 rader så får det bara bara 37 rader i varje fil som skapas, dvs cirka 4 filer eller vad det blir då, att skapa första filen är ju inga problem, men efter dom första 37 raderna, hur ser jag till att den tar efterkommande 37 och lägger i *-fil2.csv och så vidare tills alla rader är uppdelade på rätt antal filer.

Tack på förhand!

Medlem sedan dec. 2004736 inlägg
#2

Utan att vara tillräckligt duktig på PHP skulle jag göra ungefär såhär:

int antalPerFil = 37;
int filNamn = 1;
int nuvarandeRad = 1;
stream minFilStrom = new Stream("*-fil1.csv");

foreach (rad in rader) {
    SkrivTillFil(rad, minFilStrom);
    
    nuvarandeRad++;
    if (nuvarandeRad > antalPerFil) {
        filNamn++;
        nuvarandeRad = 1;

        minFilStrom.close();
        minFilStrom = new Stream("*-fil" . filNamn . ".csv");
    }
}

minFilStrom.close();
Medlem sedan feb. 20005 891 inlägg
#3

Kan du inte posta din existerande kod, så man vet vad du har för förutsättningar? Är det en array av data eller nåt annat?

Att dela upp 100 i enheter om 37 är inte svårt, använd dig av summan genom modulus (x % 37), så kommer den att returnera 0 varje "trettiosjunde" iteration.

Medlem sedan juni 2002711 inlägg
#4

Idag ser koden ut såhär:

		$query = mysql_query("SELECT korjournal.date, korjournal.kund_id, korjournal.kund, korjournal.postort, korjournal.start, korjournal.stop, korjournal.service_id, korjournal_users.user FROM korjournal INNER JOIN korjournal_users ON korjournal.user_id = korjournal_users.id WHERE korjournal.bil_id = ".$bil." AND korjournal.date BETWEEN '".$period."-01' AND '".$period."-31' ORDER BY stop ASC ");
		$count=mysql_num_rows($query);		
		
		$content = "";	
		while($row = mysql_fetch_Array($query)){
		
            $kund_id = "";
            $service_id = "";
			if($row["kund_id"] == "0"){
				$kund_id = "";
			} else {				
				$kund_id = $row["kund_id"];			
			}		
			
			if($row["service_id"] == "0"){
				$service_id = "";
			} else {				
				$service_id = $row["service_id"];				
			}
			
			$content. = $row["date"].",".$kund_id.",".$row["kund"].",".$row["postort"].",".$row["start"]. ",".$row["stop"].",,,".$service_id.",".$row["user"]."\n";				
			
		}

		echo "<a href='?do=home'><button>Tillbaka</button></a><br><br>";
		echo "<fieldset><legend>Generera rapport</legend>";
		
				
		
		$_file = "_journaler/".$bilnamn."_korjournal_".$period.".csv";
		if(file_exists($_file)){
			unlink ($_file);
		}
		$handle = fopen($_file, 'x+');
		fwrite($handle, $content);
		fclose($handle);

Och sen när den kört klart så slänger den in värdet av $content. i filen som jag öppnar.

Men vill helldre ha det så att den gör sådär med max 37 rader och sen skapar nästa fil som heter fil2.csv och fyller den med så många som finns kvar, dock max 37 osv till den är klar.

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)