|
Temat: jak zapisać strukturę do pliku Użytkownik acdwas napisał: | O, bogowie. | Nie rób tak. To bardzo nieprzenośne i wyjątkowo brzydkie/podatne na błędy | pamięci. Właściwe słowo kluczowe to "serializacja"
chodzi ci o fprintf(); fscanf();? jesli tak to zgadzam sie ze jest to niebezpieczne ale jesli struktrua jest np:
fprintf( ) itd.. sa jak najbardziej przenośne, bo pochodzą ze standardowej biblioteki I/O. Koledze chodzilo prawdopodobnie o to, że powyższy kod generuje nieprzenośne pliki. Chodzi głównie o zapis "sizeof dane", lub "sizeof(struct osoba)" i o "zrzucanie" do pliku "binarnego obrazu" struktury. Wartość sizeof(X) może się zmieniać z kompilatora na kompilator i z platformy na platformę. Tj. Kompilator A może przypisać jej wartość "a", natomiart kompilator B wartość "b". Zależy to np. od rozmiarów przypisywanych poszczególnym polom struktury (np. long ma z reguły 32 bity, ale przy kompilacji dla 64-bitowego SPARC'a może mieć 64 bity). Druga rzecz to to, że różne kompilatory wyrównują sobie struktury np. do wielokrotności X bajtów (X może być np. 4,8, 16 w zależności od kompilatora i od jego ustawień). A konkluzja jest taka, że program napisany/uruchomiony w środowisku A nie będzie rozumiał danych wygenerowanych przez ten sam program skompilowany/uruchomiony w środowisku B.
Źródło: topranking.pl/1275/jak,zapisac,strukture,do,pliku.php
Temat: Czytanie z pliku + BCB
Oczywiście, że łatwiej, ale (pomijając wyciek pamięci) nieprzenośnie. Gdy pewnego dnia OP zapragnie zmienić kompilator i bibliotekę GUI z VCL na np. wxWidgets, ten kod trzeba będzie napisać od nowa.
No tak, ale twoje pierwsze rozwiązanie też nie jest przenośne skoro w pętli ładujesz do stringgrida. Treba by osobno tworzyć vector z napisami z pliku a osobno ładować dane do StringGrida. Co do wycieku to oczywiście można go uniknąć np tak: TStringList *lista=new TStringList(); lista-LoadFromFile("c:\file.txt"); StringGrid1-RowCount= lista-Count; // tu szybkie przepisanie StringGrid1-Cols[0]-Text=lista-Text; delete lista; Za szybko napisałem bez myślenia. Pozdrawiam Źródło: topranking.pl/1280/czytanie,z,pliku,bcb.php
Temat: Czytanie z pliku + BCB
Jacek Czapla wrote:
| Oczywiście, że łatwiej, ale (pomijając wyciek pamięci) nieprzenośnie. | Gdy pewnego dnia OP zapragnie zmienić kompilator i bibliotekę GUI z | VCL na np. wxWidgets, ten kod trzeba będzie napisać od nowa. No tak, ale twoje pierwsze rozwiązanie też nie jest przenośne skoro w pętli ładujesz do stringgrida.
Na to nie ma rady -- skoro używa się jakąś kontrolkę, to kod związany z jej obsługą siłą rzeczy nie może być przenośny. Treba by osobno tworzyć vector z napisami z pliku a osobno ładować dane do StringGrida.
No i tak właśnie było w przykładzie, który podałem. Czytanie z pliku i umieszczenie tekstu w kontenerze było napisane uniwersalnie, a przy ewentualnej zmianie kompilatora czy biblioteki czy w razie użycia innej kontrolki, trzeba jedynie zmienić tę część bezpośrednio z tym związaną.
Żeby sprawa była jasna -- te uwagi to nie przygana dla sposobu, który podałeś. Sam tak robię, gdy potrzebuję program na szybko i wiem, że potem do niczego innego mi się on nie przyda. Moim celem było tylko zasygnalizowanie potencjalnego problemu.
Źródło: topranking.pl/1280/czytanie,z,pliku,bcb.php
Temat: Procedury a pliki "Marcin Szczepkowski" napisł: Zastanawia mnie jak odczytac/zapisac procedure do pliku. Chce wczytac te procedure z pliku ktorego nazwe podam po uruchomnieniu programu (externale odpadaja...).
"Legalnie" ani Pascal ani C(++) w sensie definicji języka programowania nie nadają się do takich rzeczy. Można to zrobić takim czy innym "mykiem", ale będzie to nieprzenośne na inne systemy.
Ogólnie widzę kilka wyjść: - Opuścić DOSa i posłużyć się tzw. bibliotekami ładowanymi dynamicznie, czyli np. DLL pod Win32. Do tego dokładnie one służą. To też nie jest przenośne, ale przynajmniej dostajesz wsparcie od systemu operacyjnego. - Zdefiniować sobie własny język programowania, zaimplementować w Pacalu parser i runtime do niego, i do tych plików wstawiać treści w tym języku ... ;) - He, he: w locie generować i kompilować źródła Pascalowe i później wywoływać tak powstałe programy i kazać im np. zwracać wyniki w plikach. Nieco dziwne, bo program do działania będzie wymagał kompilatora ... ;) Nie napisałeś jednego: czy te procedury mają być generowane w runtimie, czy przygotowywane przed uruchomieniem. J.K.
Źródło: topranking.pl/1301/procedury,a,pliki.php
Temat: Po przesiadca na PHP5 problem z pobieraniem plików Steven Jurczyk napisał(a): Gwarantuje ci ze sciezka do pliku nie zostanie wyslana do browsera (lokalne Location wykonywane jest bezposrednio przez serwer WWW, ktory zwraca po prostu wskazany plik do Klienta).. Rozwiazanie dziala i nie obciaza serwera... "nie zostanie wysłana do browsera" wygląda tak: HTTP/1.1 302 Found Date: Wed, 25 Oct 2006 08:40:40 GMT Server: Apache Location: /ukryty_katalog/ukryty_plik Cache-Control: max-age=86400 Expires: Thu, 26 Oct 2006 08:40:40 GMT Vary: Accept-Encoding Content-Length: 0 Content-Type: application/x-unknown Pytanie dotyczylo home.pl - i tam to prawidlowo dziala.. -- pozdrawiam Stefan Jurczyk dajcie już spokój z tym śmiesznym PHP, tu nie da się napisać nic sensownie działającego z kilku powodów m.in. dlatego, że działanie całkowicie zależy tylko i wyłącznie od humorów admina i to co się pisze jest albo cholernie nieprzenośne, albo trzeba się za bardzo narobić żeby przenośne było.
Źródło: topranking.pl/1305/po,przesiadca,na,php5,problem,z,pobieraniem.php
Temat: Zastępca dla Accessa Osoba podpisana jako Jarosław Staniek <k@wytnij.neostrada.plw artykule <news:44EC7E80.4000800@wytnij.neostrada.plpisze: Tauron said the following, On 2006-08-22 21:27:
| Poza tym, czy "sterowniki" do ODBC i Jet są darmowe i czy są w | Linuxie ? MS Jet to silnik bazy danych MS Access dostępny jedynie na Windowsa, jak wszystko tego producenta. Nieskromnie powiem, że wieloplatformowe narzędzie najlepiej czytające pliki MDB/MDE to Kexi.
Zapomniałeś napisać, że narzędzie to w wersji dla Windows nie bardzo chce być darmowe. Cena 99 euro to nie tak znowu mało za narzędzie, które z plikami Accessa nie do końca sobie radzi. Warto w takich przypadkach dwa razy się zastanowić, zanim się użyje nieprzenośnego narzędzia do projektu, który ma być przenośny.
Dotyczy to również Kexi. Nieskromnie powiem, że jedyne naprawdę przenośne rozwiązanie to stare dobre dbfy ;-P
Źródło: topranking.pl/1324/zastepca,dla,accessa.php
Temat: Unix-y
Marcin Wieczorek <wiec@polbox.comwrote: gstan@inka.zagiel.pl (Grzegorz Staniak) napisał(a) w <slrn.pl.9fv13c.sm.gstan@inka.zagiel.pl: | Ilość asemblera w kodzie jądra systemu jest odwrotnie proporcjonalna do | jego przenośności. Ilość asemblera w kodzie NT jest nieznana. Ergo: nie | masz żadnych podstaw do twierdzenia, że NT jest równie przenośne jak | każdy inny system. Żaden system nie jest przenośny. Zawsze trzeba jakiś kawałek przepisać pod konkretną architekturę. W tym sensie NT jest tak samo przenośne jak reszta systemów.
A nie zależy to (t.j. _stopień przenośności_) od ilości kodu napisanego w assemblerze i pod konkretną architekturę? (W /usr/include/asm mam 84 pliki, w stosunku do 445 w /usr/include/linux).
Jeśli trzeba zamienić 10 plików i zdefiniować odpowiednią stałą symboliczną a następnie przekompilować, to program jest IMO bardziej przenośny od takiego, w którym trzeba zamienić 50 plików oraz ciężko pozmieniać sam program, jako że pisany był z użyciem konstrukcji nieprzenośnych. Wcale nie twierdzę, że NT jest mniej (ani że jest bardziej) przenośny od Linuksa. Po prostu się na tym nie znam. Ale IMHO nie można twierdzić, że każdy _system_ jest tak samo przenośny, nawet jeśli istnieje kilka jego wersji na różne architektury. Liczy się łatwość tworzenia wersji pod inne architektury.
Źródło: topranking.pl/1330/unix,y.php
Temat: Unix-y W śro, 16 maj 2001 o 16:35 GMT, Jakub Narębski napisał(a): Marcin Wieczorek <wiec@polbox.comwrote: [...] | System przenośny to taki gdzie wszystko pójdzie bez ŻADNYCH zmian. Inaczej | dojdziemy do wniosku, że wszystko jst przenośne w okńcu 99% kodu też można | przepisać.
Khem, jeśli w kodzie (dla przykładu w C) korzysta się z konstrukcji zdefiniowanych w standardzie jako nieprzenośnych (zależnych od kompilatora lub nawet niezdefiniowanych), to trudno program nazwać przenośnym. Nie mówiąc już o korzystaniu ze specyficznych cech sprzętu.
Trzeba jeszcze uważać jak się czyta pliki binarne. Zwykłe read(fd,&i,sizeof(int)) nie jest przenośne pomiędzy little-endian a big-endian.
Źródło: topranking.pl/1330/unix,y.php
Temat: Too many unprocessed floats! Co z tym zrobic Witam myślałem, że w związku z brakiem instalatora dla Win zainstaluję sobie TeXLive 2004 spod Linuxa na partycji FAT 32, zaznaczając za jednym zamachem binaria Win i Lin. Ale oto pojawił się problem: zarówno proces instalacyjny, jak i --- co gorsza! --- updmap życzą sobie wykonać symboliczne linki, co oczywiście jest niewspierane przez FAT 32. O ile jeszcze da się rozwiązać problem z programami, o tyle linki do map w texmf-var są zupełnie nie do przełknięcia [pomijam polinkowany na okrętkę bin/i386-linux] [adam@my TeX2004]$ ls -lR texmf |grep lrw lrwxrwxrwx 1 root tex 10 sty 16 15:44 kpsepath.1 -kpsetool.1 lrwxrwxrwx 1 root tex 10 sty 16 15:44 kpsexpand.1 -kpsetool.1 lrwxrwxrwx 1 root tex 9 sty 16 15:44 mktexfmt.8 -fmtutil.8 [adam@my TeX2004]$ ls -lR texmf-var |grep lrw lrwxrwxrwx 1 adam adam 17 sty 22 00:26 dvipdfm.map -dvipdfm_ndl14.map lrwxrwxrwx 1 adam adam 14 sty 22 00:26 psfonts.map -psfonts_t1.map lrwxrwxrwx 1 adam adam 15 sty 22 00:26 pdftex.map -pdftex_dl14.map Pliki obsługiwane przez TeX są z natury swojej przenośne. Dlaczego psuć przenośność danych ich nieprzenośną lokalizacją? Czy nie lepiej byłoby kopiować pliki, zamiast je linkować, tak, by po wykonaniu updmap pod linuxem można było skompilować projekt pod Windowsem? Jak czasu starczy, zajmę się hakowaniem updmap, by usunąć z niego ln -s; Nie powinno być trudne. Jednakże chciałbym zwrócić uwagę teamu TL na problem, który jest niby nieznaczący (ilu jest dwusystemowców na liście?), ale jednak uciążliwy. Pozdrawiam z okopów nielinuksocentrycznych Adam Kucharczyk
Źródło: topranking.pl/1261/too,many,unprocessed,floats,co,z,tym,zrobic.php
Temat: Problem z cout Dnia 16 May 2000 16:28:23 GMT, Marcin 'Qrczak' Kowalczyk skrobie: zamknąć nie problem, tylko nie można na nowo otworzyć :-) Jak to nie ? Oczywiscie, ze nie mozesz otworzyc (ani uzywac wogle po zamknieciu) cout, ale mozna otworzyc sobie plik i podmienic deskryptory. Podmienić deskryptory? Ciekawe jak. Jeśli w ogóle, to nieprzenośnie,
Jaki ty jestes bezmyslny... A co Twoim zdaniem robi dup2 ? Nieprzenosnie ? Coz, w sumie problem - z tego, co mowisz i tak istnieje tez tylko na DOSie, bo nie na UNIXie, a na DOS-ie nie ma dup2 (przynajmniej nic o tym nie wiem). bo w standardach C i C++ w ogóle nie ma czegoś takiego jak deskryptor pliku.
Tak sadzisz ? To co twoim zdaniem zwraca funkcja 'int fileno( FILE* )' ? Do rozwiązania pierwotnego problemu (wysłać binarny plik na stdout), oprócz użycia gołego write (nieprzenośnie rzecz jasna, AFAIR pod DOSowym Borlandem to się nazywa _write), wystarczyłby C++owy odpowiednik fdopen (działający na iostream a nie FILE *).
Chodzi Ci zapewne o fstreambase::attach(). Problem w tym wlasnie, ze jest to metoda fstreambase, wiec niedostepna dla cout. Tylko ciekaw jestem, w jaki cudowny sposob chcialbys jej uzyc dla cout. Musialbys najpierw zamknac deskryptor 1, ale sam stwierdziles, ze to nie bedzie przenosne... Jak mówiłem, w standardzie nie da się wysłać binarnych danych na stdout / cout, chociaż przy otwieraniu innego pliku po nazwie istnieje pojęcie trybu binarnego. Tryb można określić tylko przy otwarciu pliku, a stdout / cout dostajemy już otwarty.
Ale pod UNIXem nadajacy sie do wysylania danych binarnych - jak sam zauwazyles. Pozdrawiam,
Źródło: topranking.pl/1275/problem,z,cout.php
Temat: Procedury a pliki
Użytkownik Jarek Kucypera <j@insert.com.plw wiadomości do grup dyskusyjnych napisał:92i137$6d@mail.insert.com.pl... "Legalnie" ani Pascal ani C(++) w sensie definicji języka programowania nie nadają się do takich rzeczy. Można to zrobić takim czy innym "mykiem", ale będzie to nieprzenośne na inne systemy.
Ogólnie widzę kilka wyjść: - Opuścić DOSa i posłużyć się tzw. bibliotekami ładowanymi dynamicznie, czyli np. DLL pod Win32. Do tego dokładnie one służą. To też nie jest przenośne, ale przynajmniej dostajesz wsparcie od systemu operacyjnego. - Zdefiniować sobie własny język programowania, zaimplementować w Pacalu parser i runtime do niego, i do tych plików wstawiać treści w tym języku ... ;) - He, he: w locie generować i kompilować źródła Pascalowe i później wywoływać tak powstałe programy i kazać im np. zwracać wyniki w plikach. Nieco dziwne, bo program do działania będzie wymagał kompilatora ... ;) Nie napisałeś jednego: czy te procedury mają być generowane w runtimie, czy przygotowywane przed uruchomieniem. J.K.
Procedury maja byc przygotowane wczesniej. Nie wazne jest dla mnie to czy beda one skompilowane czy nie. Liczy sie fakt zebym mogl je poznej odczytac z zewnatrz, nie definiujac z gory pliku z ktorego bede to robil. Zapomnialem (amnezja... starosc nie radosc - 17:)) wspomniec o tym ze nawet lepiej by bylo gdyby w plikach miec cale obiekty niz pojedyncze procedury. Przylsza mi na mysl inna sprawa w zwiazku z tym co powiedziales. Jak wczytac program do pamieci nie odpalajac go, od razu tylko wtedy kiedy zajdzie taka koniecznosc. Marcin Szczepkowski PS. Co to jest parser? Poczta do : marcin_s@poczta.onet.pl
Źródło: topranking.pl/1301/procedury,a,pliki.php
|