Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] zamiana zawartości stringu na zmienne
rfoltman
post 17.05.2009, 12:39:38
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.05.2009

Ostrzeżenie: (0%)
-----


Witam wszystkich

Mam następujący problem który mimo przeszukania u wujka Googla nie udaje się rozwiązać
Próbuję napisać klasę która by pobierała raporty .csv z programu Vatowiec i następnie wyświetlała wyniki na stronie www. Raporty różnią się ilością kolumn i ich nazwami . Aby rozwiązać ten problem należałoby , jak sądzę , skorzystać z instrukcji list . Już udało mi się doprowadzić do sytuacji w której otrzymuje przedzielone przecinkami wyrazy 1 wiersza np Lp , Nazwa , Typ ... itd . Mój problem polega na tym że nie potrafię dołączyć znaku zmiennej $ do uzyskanych wyrazów tak aby uzyskać formę list($lp,$Nazwa........) .Wykorzystanie implode i eval nie dało rezultatu . Będę wdzięczny za jakieś sugestie
Go to the top of the page
+Quote Post
JoShiMa
post 17.05.2009, 20:52:12
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Ja bym za pomocą explote() rozbiła ten ciąg względem przecinków uzyskując tablicę z nazwami zmiennych a następnie użyła choćby array_flip() żeby nazwy zmiennych stały się kluczami tablicy. Jeśli nie lubisz tablic to notacja z podwójnym znakiem $ powinna Cię zadowolić


--------------------
Go to the top of the page
+Quote Post
rfoltman
post 18.05.2009, 08:49:32
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.05.2009

Ostrzeżenie: (0%)
-----


Cytat(JoShiMa @ 17.05.2009, 21:52:12 ) *
Ja bym za pomocą explote() rozbiła ten ciąg względem przecinków uzyskując tablicę z nazwami zmiennych a następnie użyła choćby array_flip() żeby nazwy zmiennych stały się kluczami tablicy. Jeśli nie lubisz tablic to notacja z podwójnym znakiem $ powinna Cię zadowolić


Explode zastosowałem już wcześniej ale położyłem się na "dalszym ciągu " .Dziękuję za odpowiedź . Biorę się do testów rozwiązań aby przekonać się które działa szybciej. Raporty są kolosalne więc czas odgrywa rolę

Niestety . wypróbowałem oba rozwiązania . Oba są dobre , ale nie pasują do mojego problemu . Potrzebuje po lewej stronie LIST NAZW zmiennych ( czyli $cos, $costam) a nie ich WARTOŚCI koniecznie ze znakiem $ . Każdorazowa próba dołączenia znaku dolara kończy się tym że owszem dołącza ale z przerwą pomiędzy nazwą zmiennej a $ .
Go to the top of the page
+Quote Post
JoShiMa
post 18.05.2009, 09:06:03
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(rfoltman @ 18.05.2009, 09:49:32 ) *
Niestety . wypróbowałem oba rozwiązania . Oba są dobre , ale nie pasują do mojego problemu . Potrzebuje po lewej stronie LIST NAZW zmiennych ( czyli $cos, $costam) a nie ich WARTOŚCI koniecznie ze znakiem $ . Każdorazowa próba dołączenia znaku dolara kończy się tym że owszem dołącza ale z przerwą pomiędzy nazwą zmiennej a $ .

No przecież jak zrobisz flip to będziesz miał po lewej listę nazw. Wrzuć kawałek kodu zobaczymy co się dzieje.


--------------------
Go to the top of the page
+Quote Post
rfoltman
post 18.05.2009, 09:19:45
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.05.2009

Ostrzeżenie: (0%)
-----


Tak masz rację ale bez nieszczęsnego znaczka $, a bez tego list nie zadziała
Go to the top of the page
+Quote Post
JoShiMa
post 18.05.2009, 09:27:18
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(rfoltman @ 18.05.2009, 10:19:45 ) *
Tak masz rację ale bez nieszczęsnego znaczka $, a bez tego list nie zadziała

No daj wreszcie ten kod po porozmawiamy konkretnie... Jasne, że masz bez znaczka, bo masz to jako klucze. Czemu tak nie może być? Jak nie wyjaśnisz co i dlaczego chcesz osiągnąć to nikt Ci nie pomoże choćby chciał.


--------------------
Go to the top of the page
+Quote Post
AngelusPL
post 18.05.2009, 13:32:47
Post #7





Grupa: Zarejestrowani
Postów: 16
Pomógł: 3
Dołączył: 16.08.2007
Skąd: Oświęcim

Ostrzeżenie: (0%)
-----


Witam


Jak dobrze pamiętam to plik .csv to plik tekstowy gdzie wartości pól są oddzielone jakimś znakiem, np. ','.

Ja proponuję zrobić tak:

1. Pobieranie linijki pliku do zmiennej do póki nie zostanie natrafiony na znak końca pliku.
2. Zachowanie do tablicy rozbitej na pola linijki za pomocą explode
3. Po zakończeniu pobierania wyświetlenie za pomocą foreach zestawienia.

Pozdrawiam

Ps. Najlepiej wrzuć kawałek pliku i to co już masz biggrin.gif

Ten post edytował AngelusPL 18.05.2009, 13:35:37
Go to the top of the page
+Quote Post
rfoltman
post 19.05.2009, 09:28:26
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.05.2009

Ostrzeżenie: (0%)
-----


Witam
Zrobiłem dokładnie właśnie tak
  1. <?php
  2. print "<table>";
  3. $wskaznik = @fopen("Baza/jakasbaza.csv","r")
  4.  
  5.        or die("Nie mozna przeczytac pliku \"dlug.csv\"");
  6. while($wiersz =@fgets($wskaznik,1024))       {
  7. $wiersz = strtr($wiersz, '"'," ");
  8. $a = explode(";",$wiersz);
  9. //print $wiersz;
  10. print "<TR>";
  11. foreach($a as $b){
  12.    print"<TD>".$b."</TD>";
  13. }
  14. print "</TR>";
  15. }
  16. print "</TABLE>";
  17. ?>


Co oczywiście działa ale podaje wartości zmiennych np Nazwa Typ itd . Ja natomiast potrzebuję "dokleić" do każdej z tych wartości znaczek $ tak aby w rezultacie otrzymać string $Nazwa , $Typ itd.
Następnie nowopowstały string umieścić po lewej stronie instrukcji List($Nazwa ......
Go to the top of the page
+Quote Post
fran1o
post 19.05.2009, 09:56:49
Post #9





Grupa: Zarejestrowani
Postów: 65
Pomógł: 2
Dołączył: 15.04.2008

Ostrzeżenie: (0%)
-----


nie wiem czy Cie dobrze zrozumialem ale chcodzi Ci o cos takiego ?

  1. <?php
  2. print "<table>";
  3. $wskaznik = @fopen("Baza/jakasbaza.csv","r")
  4.  
  5.        or die("Nie mozna przeczytac pliku \"dlug.csv\"");
  6. while($wiersz =@fgets($wskaznik,1024))       {
  7. $wiersz = strtr($wiersz, '"'," ");
  8. $a = explode(";",$wiersz);
  9. //print $wiersz;
  10. print "<TR>";
  11. foreach($a as $b){
  12.    print"<TD>".'$'.$b."</TD>";
  13. }
  14. print "</TR>";
  15. }
  16. print "</TABLE>";
  17. ?>
Go to the top of the page
+Quote Post
rfoltman
post 19.05.2009, 10:27:40
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.05.2009

Ostrzeżenie: (0%)
-----


Właśnie o to tyle że jest mały szkopuł . Między znakiem dolara a wyrazem tworzy się przerwa i zamiast $Nazwa mamy
$ Nazwa a tego list może nie lubić
Go to the top of the page
+Quote Post
nospor
post 19.05.2009, 10:30:50
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no to uzyj trim bo ewidentnie b ma spacje
nie: print"<TD>".'$'.$b."</TD>";
a: print"<TD>".'$'.trim($b)."</TD>";


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
fran1o
post 19.05.2009, 10:32:47
Post #12





Grupa: Zarejestrowani
Postów: 65
Pomógł: 2
Dołączył: 15.04.2008

Ostrzeżenie: (0%)
-----


a ta przerwa nie powstaje w tej linii:
  1. <?php
  2. $wiersz = strtr($wiersz, '"'," "); //??
  3.  
  4. ?>
Go to the top of the page
+Quote Post
rfoltman
post 19.05.2009, 12:23:47
Post #13





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.05.2009

Ostrzeżenie: (0%)
-----


Dziękuję wszystkim . Problem rozwiązany
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.06.2025 - 11:04