Adott egy excel tábla benne a következő adatokkal:
kód|sorszám|dátum|parameter1|parameter2|paraméter...|paraméter83
az oszlopok alatt pedig jönnek az értékek
ezt a táblázatot kellene úgy átalakítani, hogy minden paraméter és a hozzá tartozó érték egy sor
kód|sorszám|dátum|paraméter1|érték
kód|sorszám|dátum|paraméter2|érték
remélem érthető, hogy mit szeretnék, a cél az lenne, hogy az így kapott táblát adatbázisba lehessen beimportálni.
Kézzel elég macerás lenne.
- 3022 megtekintés
Hozzászólások
ha nem megy a visualbasic, akkor csinálj belőle csv-t, aztán feldolgozod egy pársoros, tetszőleges nyelven írt szkripttel...
- A hozzászóláshoz be kell jelentkezni
Beillesztettem ide hogy hogyan néz ki a tábla csv-ben és hogy milyet szeretnék.
Sajnos nem értek sem a visualbasic-hez, sem a szkriptekhez.
Ha jól gondolom, akkor a szkript venné az első sort és mindig csak egy paramétert másolna mellé plusz az értéket, ha végzett mind a 83 paraméterrel, akkor lépne a második sorra.
Remélem jól gondolom, de szkriptként megírni nem tudnám.
- A hozzászóláshoz be kell jelentkezni
"Ha jól gondolom, akkor a szkript venné az első sort és mindig csak egy paramétert másolna mellé plusz az értéket, ha végzett mind a 83 paraméterrel, akkor lépne a második sorra."
Nagyon jól megfogalmaztad mit kell csinálni! Már csak ki kellene választanod az eszközt amivel ezt megcsinálod.
Itt az ideje egy szkriptnyelvbe belemélyedni! Nem kell megijedni persze mert ez egy elég egyszerű feladat.
Aminek utána kéne nézned ha megvan a nyelv, címszavakban:
fájl beolvasás soronként stringváltozóba
string tördelése adott jel (;) mentén
töredékek tömbváltozóba helyezése
ciklus tömb olvasásához
stringek összefűzése
stringsor kírása fájlba
És már meg is vagy!
- A hozzászóláshoz be kell jelentkezni
Köszönöm.
Már egy ideje úgy is szeretném megismerni a perl-t, valószínűleg ez lesz a választott nyelv.
- A hozzászóláshoz be kell jelentkezni
Vízmű Rt. ?
- A hozzászóláshoz be kell jelentkezni
Nem. Az adatok viszont vízvizsgálati eredmények.
- A hozzászóláshoz be kell jelentkezni
Azért gondoltam...
- A hozzászóláshoz be kell jelentkezni
Milyen adatbázis?(sql loadert lehetne használni)
Van valamilyen eszközöd tábla editálásra? (copy-paste)
- A hozzászóláshoz be kell jelentkezni
Firebird az adatbázis.
Tudom a táblát szerkeszteni.
- A hozzászóláshoz be kell jelentkezni
Mihez/mivel használod az adatbázist magát? Mármint nem valami általad írt szoftver lesz a vége, amibe integrál(tat)hatnád az importot?
Amúgy egyszerű scriptnyelvként én php-t szoktam használni ilyen célokra. Némi programozói vénával a függvényreferenciákból max. fél óra alatt össze-copy-paste-elhetsz egy ilyen scriptet.
- A hozzászóláshoz be kell jelentkezni
Az adatbázist egy nem általam írt program használja. Az új adatok már a program által elvárt formában fognak érkezni, a program előtti adatokat kell emészthető formára hozni, hogy be tudjam importálni.
- A hozzászóláshoz be kell jelentkezni
Azt sajna nem ismerem, és nem tudom, menne-e a copypaste.
Mondjuk annyit megér a dolog, hogy létrehozol
egy temp táblát a kívánt oszlopokkal, lehetőleg string mezőtípussal(hossz is fontos), aztán megnyitod a táblát
valahogy így : select * from temp for update és felveszel egy pár üres sort(insert). Átklattyintasz az excelbe, kijelölöd az átvinni kivánt oszlopokat,
sorokat copy(a szükséges adatokat áttheted egy másik sheetre is onnan egyszerűbb), majd vissza db kezelőbe és paste(itt egy sort próbálj kijelölni, ne az oszlopba akard berakni az összes adatot). Ha sikerült
akkor mehet mindre, ha nem akkor kézimunka.
- A hozzászóláshoz be kell jelentkezni
Hmm... Ez is jó kis túrás, de ennyi erével végülis excelben is át lehet sakkozni, csak kicsit munkás:
-paraméter fejlécek leduplikálása további 83 oszlopfejnek, majd leszaporítása a teljes tábla hosszában
-utána cut-paste ezeket az oszlopokat egyenként az értékoszlopaik elé, így lesz alapadatok|par1|érék1|par2|érék2...stb.
-aztán leduplikálni a munkalapot, az egyikről a paraméter/érték-pár oszlopok felét kidobni, másikról a másik felét, majd 1 táblába egymás után másolni és ezt iterálni a kívánt végeredményig
Végülis, ~20 perc alatt szerintem ez is megvan :)
- A hozzászóláshoz be kell jelentkezni
Az excel tábla kétezer sort tartalmaz, minden sort lényegében meg kell szorozni nyolcvanhárommal az 166.000 sor. Nem szívesen állnék neki kézzel.
- A hozzászóláshoz be kell jelentkezni
A sorok száma igazából lényegtelen. A 2e nem is olyan sok. Inkább az a 83 oszlop a munkás ennél a verziónál :(
Úgyhogy végülis megértelek - csak ötleteltem.
Maradjon a script!
- A hozzászóláshoz be kell jelentkezni
Miért kellene szorozni?
Amit a pastebinre tettél, ott csak 8 oszlop van, ami érdekel,
ezt nem hiszem, hogy sok időbe kerül kijelölni, vagy másik
sheetre tenni.
Vagy elnéztem?
Táblába táblát kellene copypaste-zni.
Erre irányult a hozzászolásom.
- A hozzászóláshoz be kell jelentkezni
Ilyesmire gondoltal?
Ertelem szeruen ki kell mentened egy fajlba, adnod kell neki +x jogot. Ellenorizd, hogy a perl ott van e ahova az elso sor mutat. Futtatni ugy tudod, hogy
akarmi.pl input.csv>output.csv
Windows alatt szedd le a perl -t pl innen (vagy cygwin -ben is van). Futtatni ugy tudod, hogy
perl akarmi.pl input.csv>output.csv
Biztos nem tokeletes, de kiindulasnak jo lesz.
- A hozzászóláshoz be kell jelentkezni
Mivel az AWK-ot kedvelem:
#!/usr/bin/awk -f
BEGIN { FS = ";" }
(NR == 1) {
for (i = 1; i <= NF; ++i)
title[i] = $i;
}
(NR != 1) {
for (i = 6; i <= NF; ++i) {
for (j = 1; j < 6; ++j)
printf("%s;", $j);
printf("%s;%s;\n", title[i], $i);
}
}
futtatás: ./akarmi.awk in.csv > out.csv
-----
"Ha javulni látod a dolgokat, akkor valami fölött elsiklottál."
- A hozzászóláshoz be kell jelentkezni
Kicsit szebben:
#!/usr/bin/awk -f
BEGIN { FS = ";" }
(NR == 1) {
for (i = 1; i <= NF; ++i)
title[i] = $i;
head = "";
for (j = 1; j < 6; ++j)
head = head title[j] ";";
}
(NR != 1) {
for (i = 6; i <= NF; ++i)
printf("%s%s;%s;\n", head, title[i], $i);
}
-----
"Ha javulni látod a dolgokat, akkor valami fölött elsiklottál."
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm a kódokat, ki fogom próbálni. Megpróbálom megérteni, hogy mi mit csinál.
- A hozzászóláshoz be kell jelentkezni