Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Swiftu. Zároveň využij výhodnou slevovou akci až 30 % zdarma při nákupu e-learningu - více informací.
swift week + discount 30
Avatar
Punky Frick
Člen
Avatar
Punky Frick:9. února 20:02

Uspořádání dat v souboru CSV, příklad:

primarni klic   hodnota A       hodnota B
999     4548644 788787544
999     78741   6565344
999     784     4884
555     996     56464
111     444     8454

Ahoj. Prosím o pomoc.

Potřebuju v PHP zpracovat soubor CSV, zredukovat opakující se primární klíč na jeden řádek a všechny hodnoty přidružený k tomuto klíči sečíst a pak teprve odeslat do tabulky v databázi

Potřebuju pomoc s kódem

Vím jak vytáhnout z CSV řádek po řádku a extrahovat hodnoty ze sloupců.
Vím jak se připojit do databáze a jak do ní odeslat data a jak z ní data vytáhnout.
Ale nevím jak napsat kód na tohle řešení.

Nevíte jak na to?

Výsledek:

primarni klic   hodnota A       hodnota B
999     soucet  soucet
555     996     56464
111     444     8454

Zkusil jsem: -

Chci docílit: -

 
Odpovědět
9. února 20:02
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Punky Frick
DarkCoder:9. února 22:00

Vytvoř pole objektů o velikosti počtu klíčů a inicializuj ho na nulu. Prvky objektu tvoří soucet1, soucet2, pruchod. Přečti data ze souboru, na indexu o hodnotě klíče aktualizuje hodnoty součtů a nastav indikátor průchod na 1. Při zápisu projdeš celé pole a data budeš zapisovat v případě že průchod bude roven 1.

Nahoru Odpovědět
9. února 22:00
"Chceš-li předávat své znalosti, měj kvalitní podklady."
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10. února 8:03

Vsechno vis, ale nedal jsi sem zadny kod. Takze nevime, kde delas chybu?

// https://www.php.net/manual/en/function.fgetcsv.php
// Example #1 Read and print the entire contents of a CSV file
// prepsal jsem jen jmena promenych

<?php

// pridano
$out = array()
$id = 0;
$file_name = "test.csv";

$row_index = 1;
if (($handle = fopen($file_name, "r")) !== FALSE) {
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
//        $col_end = count($row);
//        echo "<p> $num fields in line $row_index: <br /></p>\n";
//        $row_index++;
//        for ($col_index=0; $col_index < $col_end; $col_index++) {
//            echo $row[$col_index] . "<br />\n";

// pridano
$id = (int) $row[0]; // prevedes "string" na "int" nebo "float", "double", intval(), floatval() // slova pro google = php floatval
if (isset($out[$id]))
{ $out[$id][5] += (int) $row[5]; } // prevedes "string" na "int" a prictes
else
{ $out[$id] = $row; $out[$id][5] = (int) $row[5]; } // zkopirujes radek a prevedes "string" na "int", abys k tomu mohl pricitat

        }
    }
    fclose($handle);
}
?>
https://stackoverflow.com/questions/8529656/how-do-i-convert-a-string-to-a-number-in-php

Hele, ale, mi za tebe nemuzeme delat domaci ukoly do programovani. To se nenaucis premyslet dopredu, jake kroky chces podniknout, abys docilil vysledku.

Editováno 10. února 8:05
 
Nahoru Odpovědět
10. února 8:03
Avatar
Punky Frick
Člen
Avatar
Odpovídá na DarkCoder
Punky Frick:11. února 21:18

Díky za odpověď.

 
Nahoru Odpovědět
11. února 21:18
Avatar
Punky Frick
Člen
Avatar
Odpovídá na Peter Mlich
Punky Frick:11. února 21:25

Díky za odpověď a hlavně za pomoc. Ten kód jsem sem nedal, protože mi to přišlo zbytečný. Vyřešil jsem to pomocnou tabulkou v databázi a, ale přijde mi to takový jako zasírání databáze pomocnejma tabulkama. K´d o tebe určitě prozkoumám. Ještě jednou, díky.

 
Nahoru Odpovědět
11. února 21:25
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Punky Frick
Člen
Avatar
Odpovídá na Peter Mlich
Punky Frick:12. února 11:04

Ještě chci dodat, že nedělám domácí úkol. Už jsem velkej kluk a nechodím do školy. Programuju si ve volném čase jen tak pro radost. Jsem samouk a navíc automechanik. Na diskuzní fóra se obracím jen když už je to nezbytný.

 
Nahoru Odpovědět
12. února 11:04
Avatar
Punky Frick
Člen
Avatar
Odpovídá na Peter Mlich
Punky Frick:12. února 11:16

Hele, vím, že si nad tím strávil nějaký čas, abys mi pomohl a nechci znít nevděčně, ale ten kód "tak jak tu je", nefunguje. Zkopíroval jsem to, spustil a hlásí to neočekávaná proměnná id na řádku 5. ( $id = 0; )

 
Nahoru Odpovědět
12. února 11:16
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12. února 20:19

Pocita se tu s tim, ze potrebujes poradit. Chybky si nejak uz opravis. Zvlast takove, ze nekde chybi strednik. Pokud mas zaply vypis chyt, tak php ti primo napise, ze tam cekal strednik na tom a tom radku. A necekace se tam objevilo $id.
Ale, muzou tam byt i jine chyby, psal sem to z hlavy.

$out = array(); // strednik zde, na konci
$id = 0;

Tak ted nevim, zda ma smysl ti vysvetlovat zbytek kodu. Ale s tou db to mas lepsi, rychlejsi.

SELECT a,b,c FROM tab
SELECT a,sum(b) as bs,sum(c) as cs FROM tab GROUP BY a

Ten sql prikaz udela totez jako cely ten php kod :)

 
Nahoru Odpovědět
12. února 20:19
Avatar
Punky Frick
Člen
Avatar
Punky Frick:15. února 19:15

Omlouvám se, nevšiml jsem si chybějícího středníku. Vím, že PHP dost držkuje, když člověk zapomene středník, ale chybový hlášky jsou občas dost zmatečný, protože mě to upozorňuje na proměnnou, ale myslí to chybějící středník Nejsem na to zvyklej, mám radši JavaScript a ten je k chybějícím středníkům tolerantní.

Nakonec jsem to s tím polem pochopil a vyřešil.

Každopádně, ještě jednou díky za pomoc.

 
Nahoru Odpovědět
15. února 19:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.