Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam
Od paru dni poszukuje sposobu jak napisać skrypt php, który zszyta z pliku bww.txt dane w postaci:
USD#100#286.00#300.00 EUR#100#393.00#407.00 GBP#100#460.00#471.00 CHF#100#267.00#281.00 ...
i prześle je do bazy MySql w takiej postaci:
INSERT INTO `kursy` VALUES (1,'USD','100','275.00','291.00');
ważne też jest to, by bezproblemowo po każdorazowym odpaleniu skryptu, bezbłędnie nadpisywał wartości tabel bazy danych.
Ma ktoś pomysł jak to ugryźć ;)
Offline
czytaj z pliku w petli i zapisuj do bazy ::] Ciąg znakóe dziel explode
tu masz opis operacji do na plikach
http://programowanie.celary.net/operacje_na_plikach_w_php.html
a tu masz przyklada do explode
http://www.egrafik.pl/kurs-php/strings.substrings.php
Offline
może tak :
function parse($plik) { $uchwyt=fopen($plik, 'r'); while (!feof($uchwyt)) { $wiersz = trim(fgets($uchwyt)); if(substr($wiersz, 0, 1)==' ' or empty($wiersz)) continue; // usuwa puste linie explode('#',$wiersz); echo $wiersz[0] . ' - '. $wiersz[1] . ' - ' . $wiersz[2] ; } }
pisane na szybko ale powinno działać
Offline
Ok, to może inaczej, może prościej będzie napisać skrypt php, pomijając sql by zamiast:
USD#100#286.00#300.00 EUR#100#393.00#407.00 GBP#100#460.00#471.00 CHF#100#267.00#281.00 ...
pokazywał tabelkę jako strona php a w niej wskazania tych walut, np jak te nazwiska:
+----+-----------+----------+------+ | id | imie | nazwisko | wiek | +----+-----------+----------+------+ | 1 | Jan | Nowak | 37 | | 2 | Piotr | Kowalski | 15 | | 3 | Anna | Guzik | 22 | | 4 | Katarzyna | Belka | 56 | | 5 | Marian | Krzaczek | 47 | +----+-----------+----------+------+
Walut jest aż 15, plik bww.txt generuje program kasjerski i przesyła go na serwer w w/w postaci, a ja przyznam że nie jestem specjalistą w php, bardziej znam podstawy ;)
Offline
a może frytki do tego ?
funckje masz napisaną ,samo sie nie zrobi....
Offline
Wiec tak zawartość pliku czytającego to:
<?php $plik = file('bww.txt', 'r'); $tmp = str_replace("eur", "EURb", $plik); $out = ''; foreach ($tmp as $row) { $linia = explode('#', trim($row)); $out .= '<tr bgcolor="#CCCCCC">'; $out .= '<td><font color="#3333FF" size="2"> '.implode('</font></td><td><font color="#6666FF" size="2"> ', $linia).'</font></td>'; $out .= '</tr>'; } echo $out; ?>
I wszystko ładnie pięknie, w krasnalu mi pięknie stronę odpala, sczytuje, ale odpalając ją na serwerze wywala taki błąd:
Warning: file() expects parameter 2 to be long, string given in /home/a8519481/public_html/kursy.php on line 15
chodzi o tą linijkę [b]$plik = file('bww.txt', 'r');[/b] i dalej:
Warning: Invalid argument supplied for foreach() in /home/a8519481/public_html/kursy.php on line 18
Co może być jeszcze źle w tym kodzie ??
Z góry dzięki za pomoc.
Ostatnio edytowany przez Telkomp (2010-02-12 19:08:38)
Offline
zastosuj [url=http://pl.php.net/manual/pl/function.fopen.php]fopen('plik','atrybut');[/url] a pozniej [url=http://pl.php.net/manual/pl/function.fread.php]fread[/url] a na koniec fclose($handle) i po klopocie, peweniejsze to jest
---// EDIT
funkcja [url=http://pl.php.net/manual/pl/function.file.php]file()[/url] nie przyjmuje 2 parametru
Ostatnio edytowany przez jezoo (2010-02-12 20:49:14)
Offline
Z MySQLem możesz spróbować zrobić coś takiego, zakładając, że tabela wygląda mniej więcej tak:
CREATE TABLE waluty ( symbol char(3) NOT NULL PRIMARY KEY, ilosc integer NOT NULL, kurs1 DEC(3,2) NOT NULL, kurs2 DEC(3,2) NOT NULL );
Aktualizacja (jeśli dane masz już wczytane do odpowiednich zmiennych) wyglądać będzie w ten sposób:
INSERT INTO waluty VALUES ( '$symbol', $ilosc, $kurs1, $kurs2) ON DUPLICATE KEY UPDATE ilosc=$ilosc, kurs1=$kurs1, kurs2=$kurs2;
Offline
W końcu opanowane, bez użycia mysql ;)
<?php $plik = file('bww.txt'); $tmp = str_replace("eur", "EURb", $plik); $out = ''; foreach ($tmp as $row) { $linia = explode('#', trim($row)); $out .= '<tr bgcolor="#CCCCCC">'; $out .= '<td><font color="#3333FF" size="2"> '.implode('</font></td><td><font color="#6666FF" size="2"> ', $linia).'</font></td>'; $out .= '</tr>'; }; echo $out; ?>
A tu można podejrzeć efekt końcowy ;)
[url]http://krasnystawkantor.pl[/url]
Ostatnio edytowany przez Telkomp (2011-03-28 18:37:07)
Offline
cos nic nie widac :)
Offline
Time (s) | Query |
---|---|
0.00010 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00128 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.139.239.157' WHERE u.id=1 |
0.00075 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.139.239.157', 1732404644) |
0.00048 | SELECT * FROM punbb_online WHERE logged<1732404344 |
0.00059 | DELETE FROM punbb_online WHERE ident='18.117.99.192' |
0.00054 | DELETE FROM punbb_online WHERE ident='18.219.47.239' |
0.00029 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=16099 AND t.moved_to IS NULL |
0.00021 | SELECT search_for, replace_with FROM punbb_censoring |
0.00166 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=16099 ORDER BY p.id LIMIT 0,25 |
0.00068 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=16099 |
Total query time: 0.00663 s |