![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem, do którego działu najlepiej pasowałby ten temat (MySQL, PostgreSQL), więc piszę tu
![]() Ostatnio pisałem skrypt bazy danych na plikach CSV, czyli takich, w których pierwsza linia zawiera nazwy pól pooddzielane jakimś separatorem, a następne linie zawierają dane (również oddzielone tym samym separatorem). Porzuciłem ten projekt i zacząłem pisać skrypt na nieco innej zasadzie. Otórz założyłem, iż dane w bazie nie będą oddzielane separatorami, lecz będzie podawana długość każdego pola, czyli taki zapis: 004016MarsCzerwona planeta oznacza, że pierwsze pole (4 znaki) ma wartość "Mars", a drugie (16 znaków) "Czerwona planeta". Taki zapis ma jednak wady, ponieważ na początku bazy (pliku z danymi) muszę podawać z ilu cyfr ma się składać każda liczba reprezentująca ilość znaków pola, czyli np. muszę podać 3, aby liczby miały postać: 001, 002, 003 itd., lub wpisać 4 dla licyb w postaci 0001, 0002, 0003 itd. Mój problem polega na tym, że nie wiem jak mogę to uprościć, aby liczby mogły być zapisywane jako 1, 2, ... 7, 8, 9 , 10 , 11, ... 98, 99, 100, 101, a nie 001, 002, ... 007, 008, 009 , 010 , 011, ... 098, 099, 100, 101, bo przecież skrypt musi wiedzieć, jak odczytać na przykład coś takiego 123456(tak 123, 456, czy może tak 12, 34, 56, a może 12, 3, 456, albo jeszcze inaczej). Myślałem także nad liczbami w systemie 16-wym, dzięki czemu dwucyfrowa liczba mogła by mieć wartości od hex:00 (dec:0) do hex:ff (dec:255), jednakże czasami potzrebna jest większa liczba, więc musiałbym stosować trzyznakowe od 000 do fff i tu znów pojawia się ten sam problem, bo liczby muszą się składać aż z trzech znaków. Czy da się coś zrobić, aby każdy rekord w bazie danych nie rozpoczynał się długim ciągiem cyfr typu 0080050090a40060040100c2:?: -------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
jak dla mnie to nie masz wyjścia separator musisz zastosować;
np. 3;156alama kota nawet nie widze jakiegos innego wyjscia nawet teoretycznego, bo skad skrypt bedzie wiedzial to: 3156alama kota Separator bedzie tu jedynym rozwiazaniem ![]() a może użyj MySQL lub PostgeSQL -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Mój pierwszy skrypt zapisywał dane do bazy w postaci:
Kod utwor;kompozytor
Requiem;Mozart Stabat mater;Jacopone da Todi O Fortuna;Orff Missa pro pace;Kilar Potem zmieniłem skrypt pozbywając się separatorów, więc zapis w bazie wyglądał mniej więcej tak: Kod 2 Ta dwójka na początku oznacza, że każda liczba składa się z dwóch cyfr, czyli np. 05, a nie 5 :!: W rzędzie niżej znajdują się nazwy zmiennych, a w następnych wartości 0510utworkompozytor 0706RequiemMozart 1216Stabat materJacopone da Todi 0904O FortunaOrff 1405Missa pro paceKilar ![]() Czy macie może jakiś inny pomysł na stworzenie bazy danych :?: [quote] 3;156alama kota (...)Pozbyłem się separatorów między poszczególnymi polami, aby zastąpić je separatorami między liczbami na początku :?: To chyba lepszy już był mój poprzedni skrypt :? [quote]a może użyj MySQL lub PostgeSQL[/quote]MySQL'a, ani żadnej innej tego typu bazy nie chcę używać, bo mało który darmowy polski serwer obsługuje którąkolwiek z nich. -------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego nie chcesz uzywac separatorow :?:
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Cytat Dlaczego nie chcesz uzywac separatorow :?: Bo znak, którego użyłem do separacji, mógłby wystąpić również wewnątrz jakiegoś wpisu w bazie, więc przed dopisaniem czegokolwiek do bazy, dane musiałyby być sprawdzane na zawartość tego znaku, a jeśli by wystąpił, musiałby być przekonwertowany na jakiś "zastępnik", np. w przypadku ; mógłbym użyć &średnik, a zatem i znak & musiałbym przekonwertować na coś innego (np. &and) :?
-------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 268 Pomógł: 0 Dołączył: -- Skąd: kielce Ostrzeżenie: (0%) ![]() ![]() |
Mozesz tez uzyc jakiegos "dziwnego" separatora np: ~`~ chyba nikt nie bedzie chcial wpisywac czegos takiego do bazy...
Mozesz tez kazde pole oddzielic "n" - czemu nie, problem bedzie tylko, jezeli bedziesz chcial dodac jeszcze jedno pole... Albo ustalic szerokosc kazdego pola, zpiasywac i wczytywac dane przez scanf, sprintf... |
|
|
![]()
Post
#7
|
|
Grupa: Postów: 0 Pomógł: Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
kryr masz racje najlepiej zastosować jakiś nietypowy
separator i po bulu np. n takiego to chyba nikt nie wpisze a nawet jeśli ktoś będzie chciał coś takiego wpisać to można temu łatwo zaradzić pisząc funkcję która sprawdza czy we wpisanych danych jest ten separator n jesli bedzie to zamienic na coś innego np. (n) lub coś innego |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
znowu mój tekst poszedł jako anonymous
bo się nie zalogowałem :oops: a tak wogóle to pierwszy pomysł z separatoem był najlepszy czyli: ala;ma kota;i już -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
W moim pierwszym skrypcie "baza danych" użyłem separatora -|- i chyba do tego wrócę. Tak czy siak, wprowadzę zastępowanie niektórych znaków (dla bezpieczeństwa :wink: ).
-------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
pierwsze pomysły zawsze są najlepsze, prawda?
podobnie mam ze swoimi wierszami ![]() -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 268 Pomógł: 0 Dołączył: -- Skąd: kielce Ostrzeżenie: (0%) ![]() ![]() |
wierszopleta?
![]() |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
kiedyś się pisało teraz rzadziej
teraz moją miłością oraz poezją jest php aczkolwiek coś od czasu do czasu bazgrnę --------------------------------------------------- Mam pytanie: robię sobie licznik wersji, przy każdej modyfikacji pliku licznik zwiększa się o jeden, żeby tego było mało nie robię tego dla jednego pliku tylko dla całej masy plików; najpierw mój skrypcik sprawdza czy dany plik, ten który się w danym momencie otwiera jest w bazie czy nie... i tu się zaczyna już problem ... do bazy zapisywana jest nazwa pliku ze scieszką, czas ostatniej modyfikacji itp., wszystko to czyli dane na temat jednego pliku zapisywane są w jednej linii (na szczęście nie jest tego dużo) kolejny plik kolejna linia w bazie itd. ale gdy plik jest w bazie i czas ostatniej akutalizacji różni się od faktycznego to chciałbym zmodyfikować dane w bazie a tym samym licznik zwiększyć o jeden (licznik to mi się zwiększa z tym nie mam problemu) tylko z modyfikacja są problemy czy wiecie jak to zrobić? -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Cytat tylko z modyfikacja są problemy czy wiecie jak to zrobić? Chodzi Ci o modyfikację wpisu w bazie :?: Jeśli tak, to jakiej używasz :?: Swojej własnej :?: Pewnie tak, skoro piszesz w tym wątku. Domyślam się, że nie masz wszystkich potrzebnych funkcji, skoro nie potrafisz wyedytować wprowadzonych już danych.
-------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 268 Pomógł: 0 Dołączył: -- Skąd: kielce Ostrzeżenie: (0%) ![]() ![]() |
No niestety trzeba cala baze skopiowac podmieniajac jeden wpis...
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mistycus:
![]() ![]() kryr: miałem taki sam pomysł ![]() Mam pliczek a w nim wpisy np. 0.78!index.php3:1016205306 0.78!index2.php3:1016205306 ... itd. gdzie 0.78 to nr ver. potem jest plik a na końcu data ost. modyfikacji ale dzisiaj stwierdziłem, że tak być nie może i postanowiełem, że zrobie to tak 0.78 index.php3:1016205306 index2.php3:1016205306 ... no właśnie tylko mam problem z aktualizacją Mistycus: o jakie funkcie chodzi :?: -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 268 Pomógł: 0 Dołączył: -- Skąd: kielce Ostrzeżenie: (0%) ![]() ![]() |
sproboj z fseek() cos pokombinowac ... mozesz dzieki temu nadpisac jeden rekord w bazie, chyba... (nie mam pojecia, czy to zadziala :!: )
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
a jak ustawić fseek() w nowej linii ?
skoro podaje się jako tylko jedną wartość chyba ze 255 to koniec jednej linii , hmm? (czytaj poprzedni mój post) prosze o pomoc.... -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 268 Pomógł: 0 Dołączył: -- Skąd: kielce Ostrzeżenie: (0%) ![]() ![]() |
Ugh, niestety takowej mozliwosci nie ma... :?
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
no właśnie to jest ten ból
![]() (czytaj dwa przed ostatnie moje posty na tym forum) ------ -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Cytat Mistycus: o jakie funkcie chodzi :?: Nadal nic nie wiem o Twojej bazie ![]() -------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#21
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
przecież ładnie opisałem co i jak
![]() plik np.: ver.txt linie w pliku: 0.78 index.php3:101551616 mod.php3:12121213 koniec pliku ver.txt plik index.php3 ... include(ver.php3); .. plik ver.php3: sprawdzam date aktualizacji aktualnego pliku czyli index.php3 tu musze pobrać numer wersji czyli 1 linie z pliku ver.txt [0.78] teraz sprawdzić czy aktualna nazwa pliku czyli index.php3 jest w pliku ver.txt jeśli jest to sprawdzić czy czas aktualizacji różni się od obecnego jesli tak to numer wersji +1 oraz dokonać aktualizacji czasu modyfikacji pliku index.php3 w ver.txt ale dane o innych plikah muszą być nie naruszone nie wiem co jeszce chcesz wiedzieć Mistycus -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#22
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Z tego co Ty napisałeś, wnioskuję, że nie użwasz żadnej bazy danych, ani nie napisałeś sobie skryptu do obsługi bazy na plikach. Mylę się :?:
-------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#23
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Zajrzyj DVC do tematu o cnotkach, bo czeka tam na Ciebie kilka wazeliniarskich (tak je nazwał Seth) przeprosin za pisanie Twojego nicka z małych liter. Swoją drogą nie wiem, czemu Ci to przeszkadza. DVC, dvc (a może DVD
![]() -------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 456 Pomógł: 0 Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
Cytat Cytat Dlaczego nie chcesz uzywac separatorow :?: Bo znak, którego użyłem do separacji, mógłby wystąpić również wewnątrz jakiegoś wpisu w bazie, więc przed dopisaniem czegokolwiek do bazy, dane musiałyby być sprawdzane na zawartość tego znaku, a jeśli by wystąpił, musiałby być przekonwertowany na jakiś "zastępnik", np. w przypadku ; mógłbym użyć &średnik, a zatem i znak & musiałbym przekonwertować na coś innego (np. &and) :?uzyj znaku ktoregonie mozna wprowadzic klawiatura! np: Kod chr(7)
-------------------- pozdrawiam
CASTOR |
|
|
![]()
Post
#25
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mistycus: oczywiście, że napisałem skrypcik do obsługi swojej bazy na plikach, a właściwie na jednym pliku, bo po co mi więcej w tym wypadku
hmm, tak się zastanawiam cze czasem Mistycus nie chodziło ci o co innego z tym skrypcikiem tzn. funkcie przeszukującą, wstawiającą itd.... nie, ja to mam przecież tylko nie jako funkcie ![]() i nie jestem taki obrażalski tylko tak wyszło z DVC nie jestem DVD wracając do bazy to wczoraj jeszcze posiedziałem nad swoim problemem zrobilem jak napisałem wcześniej, ale gdzieś jeszcze jest mały błąd, przez chwile działało ale ostatecznie się rozjechało spoko w końcu kiedyś zrobie, nie ? -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#26
|
|
![]() Grupa: Zarejestrowani Postów: 268 Pomógł: 0 Dołączył: -- Skąd: kielce Ostrzeżenie: (0%) ![]() ![]() |
castor: czy w tedy nie trzeba czasem uzywac binary-safe : fread fwrite
![]() |
|
|
![]()
Post
#27
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
a myślicie, że ktoś będzie chciał wpisać do bazy [n] ?
-------------------- .: [ DV ] :.
|
|
|
![]()
Post
#28
|
|
Grupa: Zarejestrowani Postów: 456 Pomógł: 0 Dołączył: -- Ostrzeżenie: (0%) ![]() ![]() |
Cytat castor: czy w tedy nie trzeba czasem uzywac binary-safe : fread fwrite
![]() NIE! przeciez to znak z tatbeli ASCII ja uzywam od 28 do 31 bo to separatory ![]() -------------------- pozdrawiam
CASTOR |
|
|
![]()
Post
#29
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Cytat uzyj znaku ktoregonie mozna wprowadzic klawiatura!
Racja, dzięki np: Kod chr(7) ![]() Cytat Mistycus: oczywiście, że napisałem skrypcik do obsługi swojej bazy na plikach, a właściwie na jednym pliku, bo po co mi więcej w tym wypadku Podejrzewałem, że zrobiłeś skrypt do obsługi tylko jednego pliku, ale czy nie lepiej używać uniwersalniejszych rozwiązań :?:
Cytat wracając do bazy to wczoraj jeszcze posiedziałem nad swoim problemem
Powodzenia zrobilem jak napisałem wcześniej, ale gdzieś jeszcze jest mały błąd, przez chwile działało ale ostatecznie się rozjechało spoko w końcu kiedyś zrobie, nie ? ![]() Cytat a myślicie, że ktoś będzie chciał wpisać do bazy [n] ? Wystarczy, że wstawi entera
-------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#30
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mistycus: ale jak nie skorzystam z gotowych rozwiązań to więcej sie nauczę, prawda?
bedę mógł komus pomóc jak będzie miał problem (taki jak ja miałem) -------------------- .: [ DV ] :.
|
|
|
![]()
Post
#31
|
|
![]() Grupa: Zarejestrowani Postów: 234 Pomógł: 0 Dołączył: 9.04.2002 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Nie piszę o rozwiązaniach gotowych, ale uniwersalnych - chodzi o to, abyś stworzył sobie skrypt do obsługi więcej niż jednego pliku. Ja ostatnio sobie taki zrobiłem, ale stwierdziłem, że to chyba jednak nie ma sensu (mój skrypt miał za wiele wad
![]() -------------------- Pozdrawiam,
Mistycus |
|
|
![]()
Post
#32
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 0 Dołączył: 29.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mistycus: ale tak myśle, że na moje potrzeby i z założenia jakie przyjąłem powino mi to w zupełności wystarczyć
ten licznik wersji ma być uniwersalnym rozwiązaniem, gdyż tam gdzie nie będę miał dostępu do bazy danych typu MySQL lub PostgrSQL będzie w 100% funkcjonalny ![]() -------------------- .: [ DV ] :.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 06:17 |