Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] zamiana zawartości stringu na zmienne
Forum PHP.pl > Forum > Przedszkole
rfoltman
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
JoShiMa
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ć
rfoltman
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 $ .
JoShiMa
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.
rfoltman
Tak masz rację ale bez nieszczęsnego znaczka $, a bez tego list nie zadziała
JoShiMa
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ł.
AngelusPL
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
rfoltman
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 ......
fran1o
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. ?>
rfoltman
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ć
nospor
no to uzyj trim bo ewidentnie b ma spacje
nie: print"<TD>".'$'.$b."</TD>";
a: print"<TD>".'$'.trim($b)."</TD>";
fran1o
a ta przerwa nie powstaje w tej linii:
  1. <?php
  2. $wiersz = strtr($wiersz, '"'," "); //??
  3.  
  4. ?>
rfoltman
Dziękuję wszystkim . Problem rozwiązany
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.