Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: zamienic dane  (Przeczytany 6810 razy)

Denton

  • Gość
zamienic dane
« dnia: 2005-10-18, 13:09:29 »
Witam ,napisalem skrypt do przetwarzania daty.Funkcja while pobiera dane i ustawia je na:
a=23 ,b=30 ,dzien=31 ,miesiac=December          ,rok=2005. Funkcja leapyear sprawdza czy rok jest przestepny. If y maja zamienic date na 1 stycznia 2006 w takiej postaci: 112006 czyli dzien miesiac rok.Skrypt wyplowa mi:
23
30
31
December
2005
rok=2005
data112006
i to jest dokladnie to co chcialem otrzymac tyle ze poza tym wyplowa dalej:
rok=2006
data122006
rok=2006
data3222006

Wiem ze dzieje sie to przez to ze skrypt wykonuje sie 3 razy zamiast jednego ,ale nie wiem dlaczego a tym bardziej jak sobie z tym poradzic.
A oto skrypt:

{while(getline < \\"05060111.TXT\\" > 0){
if($1~/Started/){
a=substr($6,1,2);b=substr($6,4);print(a);print(b);
dzien=$3;print(dzien);miesiac=$4;print(miesiac);rok=$5;print(rok);}}}

function leapyear(rok)
{return rok % 4 == 0 && rok % 100 != 0 || rok % 400 == 0}

{
print \\"rok=\\"rok;
}

{if(miesiac == \\"January\\"){miesiac=1}}
{if(miesiac == \\"February\\"){miesiac=2}}
{if(miesiac == \\"March\\"){miesiac=3}}
{if(miesiac == \\"April\\"){miesiac=4}}
{if(miesiac == \\"May\\"){miesiac=5}}
{if(miesiac == \\"June\\"){miesiac=6}}
{if(miesiac == \\"July\\"){miesiac=7}}
{if(miesiac == \\"August\\"){miesiac=8}}
{if(miesiac == \\"September\\"){miesiac=9}}
{if(miesiac == \\"October\\"){miesiac=10}}
{if(miesiac == \\"November\\"){miesiac=11}}
{if(miesiac == \\"December\\"){miesiac=12}}

{if(a == 23){
if(dzien == 31 && (miesiac==1 || miesiac==3 || miesiac==5 || miesiac==7 || miesiac==8 || miesiac==10 || miesiac==12)){
miesiac++;
dzie=1;
}
else
{dzie=dzien + 1}
}
}

{if(miesiac == 13){
miesiac=1;
rok++;}}

{
print \\"data\\" dzie miesiac rok
}

agl

  • Gość
zamienic dane
« Odpowiedź #1 dnia: 2005-10-18, 18:29:25 »
2005-10-18 13:09:29 Denton napisał:

> Witam ,napisalem skrypt do przetwarzania daty.Funkcja while pobiera dane i ustawia je na:
 > a=23 ,b=30 ,dzien=31 ,miesiac=December          ,rok=2005. Funkcja leapyear sprawdza czy rok
 > jest przestepny. If y maja zamienic date na 1 stycznia 2006 w takiej postaci: 112006 czyli
 > dzien miesiac rok.
 > Wiem ze dzieje sie to przez to ze skrypt wykonuje sie 3 razy zamiast jednego ,ale nie wiem
 > dlaczego a tym bardziej jak sobie z tym poradzic.
 > A oto skrypt:
 >
 > {while(getline < \\"05060111.TXT\\" > 0){
 > if($1~/Started/){
 > a=substr($6,1,2);b=substr($6,4);print(a);print(b);
 > dzien=$3;print(dzien);miesiac=$4;print(miesiac);rok=$5;print(rok);}}}
(...)
>
Reguła awka w postaci
 {while(getline < \\"05060111.TXT\\" > 0){
(...)
}}

uruchamia się przy wczytaniu każdej linijki ze standardowego wejścia  skryptu - tak więc w Twoim wypadku zawartość pliku \\"05060111.TXT\\" wczytywana jest tyle razy, ile jest linijek na standardowym wejściu - jestem ciekaw w jaki sposób i z jakimi argumentami wywołujesz ten skrypt. Jeśli chcesz, żeby reguła została wykonana jednokrotnie, to zrób to raczej tak:
 BEGIN {while(getline < \\"05060111.TXT\\" > 0){
(...0
}}

Pozdrawiam

Denton

  • Gość
zamienic dane
« Odpowiedź #2 dnia: 2005-10-19, 12:58:20 »
Rzeczywiscie trzeba bylo wrzucic to do BEGIN, a jesli chodzi o wywolanie to wywoluje ten skrypt z nazwa pliku ,oczym nie wspomnialem wczesniej :)

bgalka

  • Gość
zamienic dane
« Odpowiedź #3 dnia: 2005-10-18, 12:05:07 »
Witam,
1. mam baze danych, poleceniem mysqldump zapisuje ja do pliku
2. z pliku wycinam wszystkie inne tabele, zostawiam tylko: id_ogloszenia
3. otrzymuje plik z takimi danymi:
INSERT INTO id_ogloszenia VALUES (34, 'zdjecie1', ....);

Moje pytanie brzmi: czy da sie (i jak :-) za pomoca skryptu zamienic wartosc " 34 " na " ' ' " ?
I jak dodac dane po 'zdjecie1' (te dane to bedzie: ,0,0)

Jesli sie nie da, to zobacze w c++, ale wole zeby to skrypt robil.

z gory dzieki

agl

  • Gość
zamienic dane
« Odpowiedź #4 dnia: 2005-10-19, 01:04:58 »
2005-10-18 12:05:07 bgalka napisał:

> Witam,
 (...)
 > 3. otrzymuje plik z takimi danymi:
 > INSERT INTO id_ogloszenia VALUES (34, 'zdjecie1', ....);
 >
 > Moje pytanie brzmi: czy da sie (i jak :-) za pomoca skryptu zamienic wartosc " 34 "
 > na " ' ' " ?
 > I jak dodac dane po 'zdjecie1' (te dane to bedzie: ,0,0)
 
Da sie i to na wiele łatwych sposobów. W C++ to byłoby niepotrzebne męczenie się, imho.

Na przykład takie polecenie w SED załatwi sprawę:
sed "s/VALUES ([0-9]+,([^,]+),/VALUES ('',1, 0, 0,/" < plik_z_danymi

Pozdrawiam

bgalka

  • Gość
zamienic dane
« Odpowiedź #5 dnia: 2005-10-19, 08:50:13 »
ok, wielkie dzieki agl za rozwiazanie, ale nie wiem dlaczego predzej na to nie wpadlem, zeby ten skrypt po prostu w php napisac, bedzie raczej o wiele latwiej :=)

A Twoje rozwiazanie i tak mi sie przyda.
pozdro

Xax79

  • Gość
zamienic dane
« Odpowiedź #6 dnia: 2005-10-19, 14:09:40 »
Ja zmiany tego typu robie w edytorze obslugujacym wyrazenia regularne np kwrite.