Kezdőoldal » Számítástechnika » Programozás » Holvannak a hibák a megoldáské...

Holvannak a hibák a megoldásként létrehozott kódban?

Figyelt kérdés

Adott egy csv fájl amely a következő adatokat tartalmazza pontosvesszővel határolva:


sorszám, dátum és idő, terméknév, eladási ár

pl. :

1;2004. 01.17 13:19;Eper;5997.35


készítsünk perl szkriptet, amely összegzést készít arról, hogy melyik termékből hányszor vásároltak és mennyi összértékben. az összegzés történjen html táblázat formájában. a feladat megoldása során használjuk a use strict; utasítást. A megoldásunk müködjön ugyanilyen felépítésű de más tartalmú adatfájl esetében is. a táblázat generálásakor szedje vastag betűvel a termék neveit illetve a táblázat fejlécét. példa kimenet:


Gyümölcs Darabszám Összár

Alma 88 419604.25



#!/usr/bin/perl -w

use strict;


open (CSV, "termek.csv")

or die "nem található a fájl";

my @sorok;

my $i=0;

while (<CSV>){

chomp;

my @sor = split /<tr><td><;>/;

if (defined $sor[1]){

@sor = split /<\/td><>/ ,$sor[1];

my @arak = split /<\/td<>\/tr>/,$sor[3];

if(defined $sor[2]){

$sorok [$i][0]=$sor[2];

$sorok[$i][1]=$arak[0];}

$i++}

}

my $osszesites={};

my $y=0;

foreach(@sorok){

if (exists $osszesites->{sorok[$y][0]}){

$osszesites->{$sorok[$y][0]}[0] =

$osszesites->{$sorok[$y][0]}[0]+1;

$osszesites->{$sorok[$y][0]}[1]=

$ossesites->{$sorok[$y][0]}[1]+$sorok[$y][1];

}

else{

$osszesites->{$sorok[$y][0]} = ['0','0' ];

$osszesites->{$sorok[$y][0]}[0] = $osszesites->{$sorok[$y][0]}[0]+1;

$osszesites->{$sorok{$y][0]}[1] = $osszesites->{$sorok[$y][0]}[1]+$sorok[$y][1];

}

$y++

}

print '<!DOCTYPE HTML>

<html>

<head>

<style type ="text/css">

#b {font-weight:bold}

</style>

</head>

<body>

<table border=1>

<tr>

<td id="b">Gyümölcs</td> <td id="b">Darabszám</

td> <td id="b">Összár</td>

<tr>'."\n";

my $kulcs;

foreach $kulcs (keys $osszesites)

{

print "<tr>\n";

print "<td id='b'>".$kulcs."</td> 2."<td>".

$osszesites->{$kulcs}[0]."</td>"."<td>".

$osszesites->{$kulcs}[1]."</td>\n";

}

print "</table>\n</body>\n<tml>\n";

#use Data::Dumper;

#printf("%.3f", Dumper(\$osszesites));



2016. dec. 11. 21:13
 1/6 anonim ***** válasza:
Miért, hol vannak a hibák benne?
2016. dec. 11. 21:38
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:

Kezdésként (sohasem programoztam perlben):

1. Hiányzik az indentálás (tudom, a fórummotor megeszi, de erre vannak a kódmegosztó oldalak, mint a pastebin, vagy a pastie.org ).

2. A feladat bemenetként pontosvesszővel tagolt CSV állományt ad meg, te meg táblázatcellák mentén vágnál szét valamit, ha rendesen megadnád, hogy mit vágnál szét.

3. Vannak benne elütések, illetve a rendes indentálás miatti áttekinthetetlenségek (meg ugye id-t csak egy elemnek adunk, ha több elemet akarunk ugyanazzal a CSS-tulajdonsággal ellátni, akkor osztályt adunk meg; a table border attribútuma meg elavult, ott van helyette a CSS), de az összesítéses rész jó.


Szóval én valahogy így csinálnám:

[link]

2016. dec. 11. 23:16
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:

Ha csak plain csv, akkor ez nem jo: my @sor = split /<tr><td><;>/;

csak igy kell: my @sor = split ";"


Itt felulirod a @sor-t: @sor = split /<\/td><>/ ,$sor[1]; (nem tudom, hogy ez tudatos-e) Meg nem tudom, hogy miert igy split-telsz.


Felesleges egyszer beolvasni a file-t es utana processzalni. Ezt meg lehet csinalni olvasas kozben. Egy ilyen hash't kell letrehozni:


hash = ( termek1 => {vasarlas = x, ertek =y},

termek2 => {vasarlas = z, ertek =w},

)


Minden alkalommal, amikor egy sort beolvasol, hozzadod a hash megfelelo ertekehez. A teljes beolvaso while loop tartalma csupan ennyi:

my ($index, $date, $item, $price) =split ";";

$hash{$item}{vasarlas} ++;

$hash{$item}{ertek} += $price;


Miutan vegeztel a file beolvasasaval nincs mas tennivalo, mint vegigmenni a hash-en es kiolvasni kiirni az osszegzett adatokat.

2016. dec. 12. 10:29
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:

Na, marhára ráértem, amíg futottak a job-jaim a hálózaton, megírtam neked egy lényegesen ésszerűbb formában:

http://pastebin dot com/rURwjWUK


Majd egyszer jössz egy sörrel. :D

2016. dec. 12. 12:15
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:

Privát üzenetben jött:

"Hello!Nagyon köszi a frankó megoldásodat:Dtök jó.

Lenne még egy hasonló feladat,abban is tudnál segíteni?"

Tudunk, tedd közzé a fórumban a kérdésed - a forráskód megosztására használj kódmegosztó oldalt (pastebin(pont)com, pastie.org, stb...)

2016. dec. 13. 12:12
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Mindenkinek köszönöm aki segített!
2016. dec. 13. 20:09

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!