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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2006-12-07 10:22:45

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Wyciąganie danych z pliku - problem

Witam! Mam taki problem odnośnie wyciągania danych z pliku w php:

Zrobiłem taki skrypt wyciągający dane z pliku tekstowego który zawiera informacje na temat 20 użytkowników. Wpis pliku tekstowego dokładnie wygląda tak: najpierw jest id użytkownika a poniżej informacje o nim czyli:

id1 Janek
---- informacje dane dane
---- dalsze dane dalsze dane informacje
---- itd.

id2 Bogdan
---- informacje dane dane
---- dalsze dane dalsze dane informacje
---- jeszcze więcej informacji niż u janka
---- itd.

id3 Adrian
---- informacje dane dane
---- dalsze dane dalsze dane informacje
---- dalsze inf.
---- itd.

użyłem do tego tablic wygląda to tak:

<?
$fd = fopen("/var/www/plik.txt", "r");
while (!feof ($fd)) {
$BUFFER[] = fgets($fd, 152);

}
echo $BUFFER[0] = str_replace(' ', '&nbsp;', $BUFFER[0]);
echo "<br>";
echo $BUFFER[1] = str_replace(' ', '&nbsp;', $BUFFER[1]);
echo "<br>";
echo $BUFFER[2]= str_replace(' ', '&nbsp;', $BUFFER[2]);
echo "<br>";
echo $BUFFER[3]= str_replace(' ', '&nbsp;', $BUFFER[3]);
echo "<br>";
echo $BUFFER[4]= str_replace(' ', '&nbsp;', $BUFFER[4]);
echo "<br>";
echo $BUFFER[5]= str_replace(' ', '&nbsp;', $BUFFER[5]);
echo "<br>";
echo $BUFFER[6]= str_replace(' ', '&nbsp;', $BUFFER[6]);
echo "<br>";
echo $BUFFER[7] = str_replace(' ', '&nbsp;', $BUFFER[7]);
echo "<br>";
itd.
?>

czyli wyciąga mi po linijce dane z pliku tekstowego.
I wszystko jest ok! Tylko problem pojawia się przy wydruku ponieważ
przypuszczalnie jak wydrukuje A4 to na jednej stronie mam dane trzech użytkowników na drugiej np dane następnych trzech użytkowników w zależności ile użytkownik ma danych.
I mam takie pytanie czy jest taka możliwość żeby dane jednego użytkownika były na jednej stronie, dane drugiego na drugiej trzeciego na trzeciej itd a nie jeden pod drugim na jednej stronie.
Był bym bardzo wdzięczny za jakiekolwiek informacje:)


dawid

Offline

 

#2  2006-12-07 14:48:51

  Contravene - Użytkownik

Contravene
Użytkownik
Zarejestrowany: 2006-08-07

Re: Wyciąganie danych z pliku - problem

Tak, to jest możliwe. Jednym ze sposobów jest użycie CSS2. Zainteresuj się właściwościami "page-break-before", "page-break-inside" oraz "page-break-after".

Offline

 

#3  2006-12-08 14:05:35

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Wyciąganie danych z pliku - problem

okej! dobra opcja tylko jakiego wpisu użyć aby przypuszczalnie uciął mi stronę przy:

id1 Janek
---- adres
----- dane 1
----- dane 2

i ucina mi stronę po dane 2


dawid

Offline

 

#4  2006-12-08 14:45:00

  Contravene - Użytkownik

Contravene
Użytkownik
Zarejestrowany: 2006-08-07

Re: Wyciąganie danych z pliku - problem

Każdą taką grupę danych obejmij znacznikami - span, table etc. Teraz dwie opcje do wyboru:

- każdej grupie oprócz pierwszej nadaj właściwość "page-break-before = always;" (albo inna wartość, zależy od ciebie),
- każdej grupie oprócz ostatniej nadaj właściwość "page-break-after = always;" (jak wyżej).

Offline

 

#5  2006-12-08 18:18:06

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Wyciąganie danych z pliku - problem

tylko sprawa wygląda tak że on dzięki tablicom wyciągając linie po lini z danymi wystawia je na przeglądarce i chodzi o to żeby przypuszczalnie gdy u kogoś będzie wpis np dane 40 i będzie to ostatni wpis dla tego użytkownika to żeby ucinał tą stronę i następnego już umieszczał na następnej. Bo wygląda to tak że za drugim wczytaniem z pliku ktoś może mieć więcej danych czyli ilość danych na każde wczytanie niejest określona a jak ustawie mu co ileś to on zawsze będzie mi ucinał w tym samym miejscu.


dawid

Offline

 

#6  2006-12-08 18:53:10

  maryaan - Użytkownik

maryaan
Użytkownik
Skąd: bieszczadzka wioska :)
Zarejestrowany: 2006-12-02

Re: Wyciąganie danych z pliku - problem

dlatego Contravene pisal o grupach, wszystkie dane uzytkownika umieszczasz w jednej grupie i lamiesz strone przed/po niej, to ile wewnatrz znajdzie sie danych nie ma znaczenia

Offline

 

#7  2006-12-11 07:49:03

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Wyciąganie danych z pliku - problem

No tak tylko niewiem czy sie dobrze zrozumieliśmy: Contravene napisał żeby objąć każdą grupę znacznikami! z tego co zrozumiałem każda grupa to uzytkownik i jego dane. Z tym że nieidzie określić gdzie kończy się dana grupa dlatego że po kolejnym zaciągnięciu danych z nowowygenerowanego pliku danych tych może byc więcej. Chyba że żle rozumie??może by mi to ktoś wytłumaczył uzywając tego w tym kodzie??


<?
$fd = fopen("/var/www/plik.txt", "r");
while (!feof ($fd)) {
$BUFFER[] = fgets($fd, 152);

}
echo $BUFFER[0] = str_replace(' ', '&nbsp;', $BUFFER[0]);
echo "<br>";
echo $BUFFER[1] = str_replace(' ', '&nbsp;', $BUFFER[1]);
echo "<br>";
echo $BUFFER[2]= str_replace(' ', '&nbsp;', $BUFFER[2]);
echo "<br>";
echo $BUFFER[3]= str_replace(' ', '&nbsp;', $BUFFER[3]);
echo "<br>";
echo $BUFFER[4]= str_replace(' ', '&nbsp;', $BUFFER[4]);
echo "<br>";
echo $BUFFER[5]= str_replace(' ', '&nbsp;', $BUFFER[5]);
echo "<br>";
echo $BUFFER[6]= str_replace(' ', '&nbsp;', $BUFFER[6]);
echo "<br>";
echo $BUFFER[7] = str_replace(' ', '&nbsp;', $BUFFER[7]);
echo "<br>";
itd.
?>

bo może być tak że :


echo $BUFFER[0] = str_replace(' ', '&nbsp;', $BUFFER[0]); wyciągnie mi linie z - id1 Janek
echo "<br>";
echo $BUFFER[1] = str_replace(' ', '&nbsp;', $BUFFER[1]); wyciągnie dane z adresem
echo "<br>";
echo $BUFFER[2]= str_replace(' ', '&nbsp;', $BUFFER[2]); wyciągnie dane zainteresowania
echo "<br>";
echo $BUFFER[3]= str_replace(' ', '&nbsp;', $BUFFER[3]);
echo "<br>";
echo $BUFFER[4]= str_replace(' ', '&nbsp;', $BUFFER[4]);

a na drugi dzień przypuszczalnie jak plik się zmieni i Janek bedzie miał mniej danych to wyciągnie z lini drugiej:

echo $BUFFER[2]= str_replace(' ', '&nbsp;', $BUFFER[2]); id2 następny użytkownik

ponieważ w tym miejscu w pliku już niebędzie danych z zainteresowaniami  pierwszego uzytkownika tylko dane drugiego.
Może ja nierozumie ale jak to objąć znacznikami w takim razie żeby było tak jak mówicie??


dawid

Offline

 

#8  2006-12-11 10:55:23

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Wyciąganie danych z pliku - problem

Może jest taka mozliwość że :
jesli znajdzie przypuszczalnie jakis znak lub słowo np id3 to łamie strone i po tym zaczyna od nowej??? to by chyba najprościej rozwiazało sprawę


dawid

Offline

 

#9  2006-12-11 13:41:32

  maryaan - Użytkownik

maryaan
Użytkownik
Skąd: bieszczadzka wioska :)
Zarejestrowany: 2006-12-02

Re: Wyciąganie danych z pliku - problem

w pliku tekstowym musisz wpisywac cos co jednoznacznie bedzie identyfikowalo miejsce podzialu (jesli to idxxx bedzie takim ciagiem to jak najbardziej moze byc, tylko jesli w danych pojawi sie idxxx to bedzie zonk, x = cyfra) badz tez cos co bedzie okreslalo czy dany wiersz zawiera identyfikator uzytkownika czy informacje o nim, np kazdy wiersz z identyfikatorem moglby sie zaczynac od I: a z danymi od D: wtedy po kolei wczytujac linijki srpawdzasz czy nie wczytano linii z poczatkiem "I:" jesli wczytano to konczysz poprzednia grupe i zacyznasz nastepna. Oczywiscie za kazdym razem musialbys wycinac poczatkowe dwa znaki.

Offline

 

#10  2006-12-11 15:35:20

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Wyciąganie danych z pliku - problem

Noo ok:)! ze znacznikiem nie było by problemu ponieważ w danych niebędzie występować  taki sam jak początkowy. Tylko jaka opcją zrobić cos takiego?? Dalej przez page-break-before = always????


dawid

Offline

 

#11  2006-12-11 19:31:45

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Wyciąganie danych z pliku - problem

aby w kodzie php ustalic czy trwa rekord czy nie sprawdzasz poczatkowe znaki kazdej wczytanej linii i jezeli jest to id... to zaczyna sie rekord (i wstawiasz zanczik otwierajacy "ubieranie" rekordu) oraz jezeli wczesniej byl rekord (kontrolujesz to jakas zmienna) przed nim zamykajacy poprzedni ...


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#12  2006-12-12 08:30:10

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Wyciąganie danych z pliku - problem

No to spoko! tylko czy jest ktoś w stanie po krótce mi pokazać na tym kodzie jak to zorbić mniej więcej??


dawid

Offline

 

#13  2006-12-12 14:13:31

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Wyciąganie danych z pliku - problem

Czytanie linia po linii prosto z manuala (php.net):

<?php
$uchwyt = @fopen ("/tmp/inputfile.txt", "r");
if ($uchwyt) {
while (!feof($uchwyt)) {
   $buffer = fgets($uchwyt, 4096);
   echo $buffer;
   }
fclose ($uchwyt);
}
?>

teraz tylko zrobisz sprawdzanie co jest w linii. Nie lepiej ustalić tabelkowy układ pliku np.

id1|tekst1|tekst2|tekst3
id2|tekst1|tekst2|tekst3

wtedy łatwo rozdzielić stringa po znaku | przy pomocy explode().
Swoją drogą to po to są bazy danych, żeby sobie ułatwić życie i nie bawić się plikami.

Offline

 

#14  2006-12-12 17:44:29

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Wyciąganie danych z pliku - problem

w ukladzie jaki masz obecnie:

Kod:

<? 
$first=true;
$fd = fopen("/var/www/plik.txt", "r"); 
while (!feof ($fd)) { 
  $BUFFER = fgets($fd, 152); 
  if ($BUFFER[1]=="i" && $BUFFER[2]=="d") {
    if (! $first) echo "</div>";
    $first=false;
    echo "<div>" . str_replace(' ', '&nbsp;', $BUFFER)
  } else if ($BUFFER[1]=="-" && $BUFFER[2]=="-") {
    echo str_replace(' ', '&nbsp;', $BUFFER);
  } else
    echo ERROR;
} 
echo "</div>"
?>

(kod nietestowany, pisany z pamieci)


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#15  2006-12-14 08:39:31

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Wyciąganie danych z pliku - problem

hmmm przy tym kodzie:

<?
$first=true;
$fd = fopen("/var/www/plik.txt", "r");
while (!feof ($fd)) {
  $BUFFER = fgets($fd, 152);
  if ($BUFFER[1]=="i" && $BUFFER[2]=="d") {
    if (! $first) echo "</div>";
    $first=false;
    echo "<div>" . str_replace(' ', '&nbsp;', $BUFFER)
  } else if ($BUFFER[1]=="-" && $BUFFER[2]=="-") {
    echo str_replace(' ', '&nbsp;', $BUFFER);
  } else
    echo ERROR;
}
echo "</div>"
?>

wyrzuca mi ciągiem:

ERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERROR

i niewiem jak to rozgryść??


dawid

Offline

 

#16  2006-12-14 09:34:35

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Wyciąganie danych z pliku - problem

ooo nawet inaczej dałem mu tablice od 0 czyli:

<?
$first=true;
$fd = fopen("/var/www/plik.txt", "r");
while (!feof ($fd)) {
$BUFFER = fgets($fd, 152);
if ($BUFFER[0]=="i" && $BUFFER[1]=="d") {
if (! $first) echo "</div>";
$first=false;
echo "<div>" . str_replace(' ', '&nbsp;', $BUFFER)
} else if ($BUFFER[0]=="-" && $BUFFER[1]=="-") {
echo str_replace(' ', '&nbsp;', $BUFFER);
} else
echo ERROR;
}
echo "</div>"
?>

i teraz mi wyrzuca:
id1 Janek ERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERRORERROR
( w jednej lini)

czyli czemu wyrzuca mi tylko początkowe dane?? i jeszcze jedno mnie zastanawia czemu tam jest :

($BUFFER[0]=="i" && $BUFFER[1]=="d")

rozumie że i oraz d ale id jest tylko w pierwszej lini! widze że kod jest konkretny tylko sie troche pogubiłem.
nierozumie tez myslników:

else if ($BUFFER[0]=="-" && $BUFFER[1]=="-")


dawid

Offline

 

#17  2006-12-14 14:11:52

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: Wyciąganie danych z pliku - problem

1. sory za indeksowanie tablic ... ale ostatnio pisze w takim austriackim ustrojswie ze tablice indeksuje sie od 1
2. bo wlasnie chodzi o to aby odroznic pierwszy wiersz rekordu (zaczynajacy sie od id) od kolejnych - zaczynajacych sie jak podales od myslnikow ....
3. czy wyrzuca tylko id1 czy kolejne takze ?
4. zamien moze echo ERROR;  na echo "ERROR ($BUFFER)<br />"; wtedy bedziemy widzieli jakie linie odrzuca ...
5. po echo "<div>" . str_replace(' ', '&nbsp;', $BUFFER)  powinien byc srednik ...


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#18  2006-12-14 14:24:19

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Wyciąganie danych z pliku - problem

Ech. Jednak to bez znaczenia czy jest tak:

Kod:

echo str_replace(' ', '&nbsp;', $BUFFER); 

czy tak:

Kod:

str_replace(' ', '&nbsp;', $BUFFER);
echo $BUFFER;

Sory za wprowadzanie w błąd. str_replace() jednak zwraca zmieniony string, wydawało mi się że zwraca tylko true gdy nastąpi zmiana. Mój błąd.

Offline

 

#19  2006-12-15 07:56:21

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Wyciąganie danych z pliku - problem

Udało się:) po lekkim przerobieniu kodu wszystko wyszło ok!:) dzięki za pomoc:) skrypt wygląda tak:


<?
$first=true;
$fd = fopen("/var/www/apache2-default/plik.txt", "r");
while (!feof ($fd)) {
  $BUFFER = fgets($fd, 152);
  if ($BUFFER[0]=="i" && $BUFFER[1]=="d") {
    if (! $first) echo "</div>";
    $first=false;
    echo "<div>" . str_replace(' ', '&nbsp;', $BUFFER);
  } else if ($BUFFER) {
    echo str_replace(' ', '&nbsp;', $BUFFER);
  } else
    echo ERROR;
}
echo "</div>"
?>


</b>

z czego po body wpis CSS:

<style type="text/css"><!--
div { page-break-after: always; }
--></style>

i już ucina mi strone dokładnie w momencie id także jest ok!!mysle że skrypt także komuś sie przyda:)


dawid

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)