MSSQL export to CSV: number_format

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Dennis B

Dennis B

30/05/2015 17:47:06
Quote Anchor link
Hallo allemaal,

Ik heb een werkend script dat vanuit MSSQL data exporteert naar csv. Wanneer ik het bestand met notepad open krijg ik .0000;1234.5600; enz.
De juiste waarden van bovenstaand voorbeeld is: 0.00 en 1234.56. Er komen dus telkens 2 extra nullen aan het eind bij. Bij 0.00 laat ie de eerste 0 niet zien.

In MSSQL heb ik het Money format, ik heb met dit probleem meer ervaring, dit heeft te maken met een number_format, alleen ik weet niet hoe ik number_format kan implementeren in mijn script.

hieronder het script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

include'connection.php';
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

$fileName = 'test.csv';
 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename={$fileName}");
header("Expires: 0");
header("Pragma: public");
 
$fh = fopen( 'php://output', 'w' );
 
    $query = "SELECT * FROM table";
    $res = odbc_exec($db,$query);

$headerDisplayed = false;
// Add a header row if it hasn't been added yet

while($row = odbc_fetch_array($res)){

    if ( !$headerDisplayed ) {
        // Use the keys from $data as the titles
        fputcsv($fh, array_keys($row), ";");
        $headerDisplayed = true;
    }

    
    // Put the data into the stream
    fputcsv($fh, $row, ";");
}


// Close the file
fclose($fh);
// Make sure nothing else is sent, our file is done
exit;

?>


Alvast bedankt.
Gewijzigd op 30/05/2015 17:48:01 door Dennis B
 
PHP hulp

PHP hulp

16/11/2024 11:32:15
 
Thomas van den Heuvel

Thomas van den Heuvel

30/05/2015 20:29:16
Quote Anchor link
Voor regel 33 de kolommen van $row die van het "Money format" zijn aanpassen met number_format()?
 
Dennis B

Dennis B

30/05/2015 20:41:06
Quote Anchor link
Hoi Thomas,

Bedankt voor je reactie.
Dit heb ik al getest op de volgende manier: fputcsv($fh, number_format($row,2), ";");
Maar dit werkt helaas niet.

Alvast bedankt.
 
Thomas van den Heuvel

Thomas van den Heuvel

30/05/2015 20:49:34
Quote Anchor link
Mja, number_format op een array werkt niet he.

Noot: je wil de "thousand separator" waarschijnlijk ook leeg maken (4e parameter number_format()).

Zoiets dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// ...

// array with names of "Money format" columns

$moneyColumns = array('momoney', 'moprobs');

while ($row = odbc_fetch_array($res)){
    if (!$headerDisplayed) {
        // Use the keys from $data as the titles
        fputcsv($fh, array_keys($row), ";");
        $headerDisplayed = true;
    }

    
    // adjust money columns
    foreach ($moneyColumns as $moneyCol) {
        $row[$moneyCol] = number_format($row[$moneyCol], 2, '.', '');
    }

    // current row is now correctly modified for insertion into CSV

    // Put the data into the stream

    fputcsv($fh, $row, ";");
}

?>
 
Dennis B

Dennis B

30/05/2015 21:19:50
Quote Anchor link
Bedankt voor de reactie, waar haal je de momoney en de moprobs vandaan? Of wat wil dat zeggen, daar krijg ik nu een foutmelding van.
 
Johan K

Johan K

30/05/2015 23:59:13
Quote Anchor link
@Dennis, Thomas geeft jouw een code die werkt met kolom namen in plaats van een numerieke index. Zijn code werkt niet aangezien odbc_fetch_array() de positie van kolommen als nummer geeft. Het is dan ook niet echt verstandig om deze functie te gebruiken tenzij je weet wat je doet.

[fout]Verander "odbc_fetch_array" naar "odbc_fetch_row" en pas de "$moneyColumns" array aan met de kolom naam(en) van je database waar het geld bedrag in staat.[/fout]

Als je dat niet weet, plaats dan even in de while loop:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
  print_r($row);
?>

Misschien dat je dan wel ziet wat je doet.

Ja, ik kan het voor je voorkauwen zodat je het kan copy-pasten maar zo leer je het niet.
Gewijzigd op 31/05/2015 01:44:21 door Johan K
 
Dennis B

Dennis B

31/05/2015 00:37:43
Quote Anchor link
Hoi Johan,

Het zijn meerdere kolomnamen maar via mijn huidige code haalt ie alles op, zonder dat ik ik alle kolommen moet benoemen, met een nummer of met de naam. Of is dit niet mogelijk wat ik wil? Ik wil mijn script namelijk zo dynamisch mogelijk hebben.

Ik zal morgen die print_r is gebruiken.
 
Johan K

Johan K

31/05/2015 01:00:13
Quote Anchor link
@Dennis, jouw SQL code haalt alles op (de *). [fout]De functies "odbc_fetch_row()" of "odbc_fetch_array()" doen allebij precies hetzelfde alleen krijg je een andere array structuur terug.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
  # odbc_fetch_array()
  $row = array(
    0 => 'waarde 1' // van de eerste kolom in je db
    1 => 'nog een waarde' // van de tweede kolom in je db
    2 => 'meh' // etc.
  )
  echo $row[2] // meh

  # odbc_fetch_row()

  $row = array(
    'kolomnaam1' => 'waarde 1'
    'monies'
=> 'nog een waarde'
    'paid'
=> 'meh'
  )
  echo $row['monies']; // nog een waarde

?>
[/fout]
Gewijzigd op 31/05/2015 01:45:06 door Johan K
 
Thomas van den Heuvel

Thomas van den Heuvel

31/05/2015 01:01:57
Quote Anchor link
Errr, dat wordt lastig als je bedragen in specifieke kolommen wilt omzetten? Tenzij alle kolommen bedragen bevatten? Je geeft ook niet echt aan hoe je tabel eruit ziet he.

@Johan K en met odbc_fetch_row() is weer wat anders aan de hand als ik PHP.net mag geloven, deze moet je gebruiken in combinatie met odbc_result(), want odbc_fetch_row() geeft enkel een boolean terug...

Je zult dus iig wat moeten experimenteren met de odbc functies.
 
Johan K

Johan K

31/05/2015 01:42:17
Quote Anchor link
Thomas van den Heuvel op 31/05/2015 01:01:57:
Errr, dat wordt lastig als je bedragen in specifieke kolommen wilt omzetten? Tenzij alle kolommen bedragen bevatten? Je geeft ook niet echt aan hoe je tabel eruit ziet he.

@Johan K en met odbc_fetch_row() is weer wat anders aan de hand als ik PHP.net mag geloven, deze moet je gebruiken in combinatie met odbc_result(), want odbc_fetch_row() geeft enkel een boolean terug...

Je zult dus iig wat moeten experimenteren met de odbc functies.


Je hebt helemaal gelijk, de enigste manier om een kolom naam te krijgen is via "odbc_field_name()" beetje dom van me..

Ik zal het bij deze dan maar toch wel effe voorkauwen omdat ik ook fout zat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

include'connection.php';
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

$fileName = 'test.csv';
 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header('Content-Description: File Transfer');
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename={$fileName}");
header("Expires: 0");
header("Pragma: public");
 
$fh = fopen( 'php://output', 'w' );
 
    $query = "SELECT * FROM table";
    $res = odbc_exec($db,$query);

$headerDisplayed = false;
// Add a header row if it hasn't been added yet

while($row = odbc_fetch_array($res)){
    
    $i = 1; // gebruik print_r($row) om er achter te komen welke array index jouw "currency" bevat.
    $row[$i] = number_format( $row[$i], 2 );

    if ( !$headerDisplayed ) {
        // Use the keys from $data as the titles
        fputcsv($fh, array_keys($row), ";");
        $headerDisplayed = true;
    }

    
    // Put the data into the stream
    fputcsv($fh, $row, ";");
}


// Close the file
fclose($fh);
// Make sure nothing else is sent, our file is done
exit;

?>
 
Thomas van den Heuvel

Thomas van den Heuvel

31/05/2015 11:44:28
Quote Anchor link
To be fair: de topicstarter gaf niet aan dat daar het probleem zat / zit.

Vaak is 3/4 van het werk om vragen op een forum als deze te beantwoorden het uitvogelen:
- wat iemand nu bedoelt
- wat iemand nu wil

Als dat duidelijk is geworden is het vinden van een oplossing simpelweg het extrapoleren van de verzamelde informatie...

Volgens mij wordt dit in de volksmond ook wel het opstellen van een specificatie genoemd.

Vergelijk het met het bakken van een taart. Zonder een recept wordt dat verdomd lastig en weet ik ook niet hoe deze uiteindelijk zou moeten smaken.
 
Dennis B

Dennis B

01/06/2015 09:23:27
Quote Anchor link
Bedankt voor de informatie, ik snap nu een array iets meer :). Alleen bij het voorbeeld van Johan heb ik nog wel een vraag. Ik heb voor de $i een print_r gedaan. Bijna alle kolommen bevatten een bedrag dat de number_format moet bevatten. Hoe kan ik er voorzorgen dat $i variabel wordt?

Alvast bedankt.

Toevoeging op 01/06/2015 09:51:01:

Ik heb het al opgelost door deze regel $row['kolom1'] = number_format( $row['kolom1'], 2, ',', ''); te herhalen voor elke kolom. Bedankt voor de hulp!
Gewijzigd op 01/06/2015 09:52:59 door Dennis B
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.