alek12 Napisano Grudzień 10, 2008 Zgłoś Share Napisano Grudzień 10, 2008 Witam czy jest jakaś możliwość pozmieniać poszczególne bajty w plikach. Chodzi mi głównie o zmianę bajtów w przedziałach od np 00x0 do 00x0A na FF. Udało mi się tylko pozmieniać bajty ale wszystkie na FF Abyte := MPHEXEDITOR2//tutaj program pobiera bajty z tabeli Abyte:=StrToInt("xFF") Tylko w ten sposób udało mi się zmienić bajty ale wszystkie na FF. Mam jeszcze jeden pomysł lecz nie wiem czy coś z tego może być : 1.Czy jest możliwość skopiowania poszczególnych bajtów z pliku i skopiowanie ich do pliku 2. Proszę was o odpowiedz.. Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 11, 2008 Autor Zgłoś Share Napisano Grudzień 11, 2008 Program wywala mi wszystkie bajty na okno o nazwie MPHEXEDITOR2 może da się jakoś z niego odczytać linie tak jak w przypadku Tmemo czy Richedit ? Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Grudzień 11, 2008 Zgłoś Share Napisano Grudzień 11, 2008 var a, b: TFileStream; t: integer; b: byte; begin a := TFileStream.Create('plikWejsciowy.dat', fmOpen); b := TFileStream.Create('plikWyjsiowy.dat', fmCreate); for t := 0 to a.size-1 do begin a.read(b, 1); if b = 0 then b := $ff; b.write(b,1); end; a.Free; b.Free; end; Pisane z pamieci wiec pewnie jakies babole beda, musisz dopracowac sam. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Grudzień 11, 2008 Zgłoś Share Napisano Grudzień 11, 2008 nie if b=0, a if b in [0..$0A] Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 11, 2008 Autor Zgłoś Share Napisano Grudzień 11, 2008 Mógłbyś wyjaśnić mi ten algorytm?? Tak jak ja to rozumiem Otwieranie pliku do odczytu , lecz w tym przykładzie fmOpen kompilator wywalał mi błąd więc zmieniłem na fmOpenRead. Potem program tworzy nowy plik var a, b: TFileStream; t: integer; c: byte; begin a := TFileStream.Create('kk.bin', fmOpenRead); b := TFileStream.Create('kk2.bin', fmCreate); for t := 0 to a.size-1 do begin a.read(c,1); if c <> 0 then c := $AA; b.write(c,1); end; a.Free; b.Free; end; Coś jest nie tak ponieważ zmienia on cały plik na $AA a nie pojedyncze bajty. Dlaczego ?? Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Grudzień 11, 2008 Zgłoś Share Napisano Grudzień 11, 2008 hmmm... zastanowmy sie co robi linijka: if c 0 then c := $AA; ? Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 11, 2008 Autor Zgłoś Share Napisano Grudzień 11, 2008 Nie to było źle , już to zmieniłem c<> $AA then C:=$AA chodzi oto że jeśli ten odczytany bajt jest różny od $AA to przydziela mu $AA. Tylko jak na razie nie zmienia jednego bajtu tylko wszystkie. Tylko dlaczego Link do komentarza Udostępnij na innych stronach More sharing options...
Cubixmeister Napisano Grudzień 11, 2008 Zgłoś Share Napisano Grudzień 11, 2008 Jeżeli masz warunek if not (c = $AA) then c:= $AA0rrmZ&Źv\0nŹŹ\"jj0ł Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Grudzień 11, 2008 Zgłoś Share Napisano Grudzień 11, 2008 czlowieku wez napij sie mleka, napisz sobie to na kartce i zastanow sie co ty wypisujesz..... pomoge ci masz dane wejsciowe AA, ba, 3, 44, 12, 0, 11, aa, 44, 22 teraz wez kazdy z tych bajtow i potraktuj je swoim warunkiem i zobacz jakie beda wyniki.... Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 11, 2008 Autor Zgłoś Share Napisano Grudzień 11, 2008 czlowieku wez napij sie mleka, napisz sobie to na kartce i zastanow sie co ty wypisujesz..... pomoge ci masz dane wejsciowe AA, ba, 3, 44, 12, 0, 11, aa, 44, 22 teraz wez kazdy z tych bajtow i potraktuj je swoim warunkiem i zobacz jakie beda wyniki.... ? ^^ Wszędzie wynik wyjdzie AA. Wiem że ten warunek jest zły ale próbowałem twój warunek, warunek cubixa i forca i ciągle ten nam syf : http://img66.imageshack.us/my.php?image=aaru3.jpg Mi chodzi o to aby odczytać jeden bajt z tej całej tabeli co w obrazku czyli odczytać FF zapisać go w zmienej C i wrzucić do warunku i tak z resztą Link do komentarza Udostępnij na innych stronach More sharing options...
Dexarz Napisano Grudzień 11, 2008 Zgłoś Share Napisano Grudzień 11, 2008 mphexeditor2 ...hmm ,napisz wasnego mphexeditor2 lub sprawdź zo robi ta funkcja ...Tzn ,czy chce parametr ,czy może nie chce i co jest zwracane ... A może ,zle korzystasz z Abyte ??Nie zdefiniofaeś czasem tabeli Abyte ?? .bo .... PS.Dlaczego ma się napić akurat mleka ?? Aktualnie piszę 32 bitowy system operacyjny. ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40% Stick's Adventure 3 - 0% Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP Przykład programu w ASE2.0: <?arg #CreateProcs; $i:?; #For('$i,10,1,@Lab');@Lab; #Sleep(100); #Message("Ten komputer ulegnie autodestrukcji za $i sekund"); #Retf; #Message('Dead'); arg?> Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 11, 2008 Autor Zgłoś Share Napisano Grudzień 11, 2008 Więc tak dokładnie to wygląda tak Abyte:=(MPHEXEDITOR2.data[count]) zawiera ona informacje które zostały zapisane w tabeli MPHEXEDITOR która pokazana jest w linku wyżej. Abyte wykorzystana jest do zapisu pliku , czyli tego co jest w tabeli do pliku write(Savefile,Abyte) Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Grudzień 11, 2008 Zgłoś Share Napisano Grudzień 11, 2008 var a, b: TFileStream; t: integer; c: byte; begin a := TFileStream.Create('kk.bin', fmOpenRead); b := TFileStream.Create('kk2.bin', fmCreate); for t := 0 to a.size-1 do begin a.read(c,1); if c in [0..$0A] then c := $AA; b.write(c,1); end; a.Free; b.Free; end; to rozwiązanie Toster'a poprawione przez Force'a działa więc o co kaman? Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 11, 2008 Autor Zgłoś Share Napisano Grudzień 11, 2008 hmm.. sprawdzeń jeszcze raz. Chyba teraz zadziałało wiec co przedtem było nie tak ;/ A co trzeba dodać aby on np pozmieniał w sektorze 00x1 wszystko na FF Link do komentarza Udostępnij na innych stronach More sharing options...
Cubixmeister Napisano Grudzień 11, 2008 Zgłoś Share Napisano Grudzień 11, 2008 Odpuść sobie programowanie... to nie dla Ciebie. Zawsze możesz pisać wiersze (-: Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 11, 2008 Autor Zgłoś Share Napisano Grudzień 11, 2008 Udało się po usunięciu for t := 0 to a.size-1 do begin otrzymałem to co chciałem przeczytał pierwszą porcję bajtów tak jak chciałem. Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Grudzień 12, 2008 Zgłoś Share Napisano Grudzień 12, 2008 Udało się po usunięciu for t := 0 to a.size-1 do begin otrzymałem to co chciałem przeczytał pierwszą porcję bajtów tak jak chciałem. to się nazywa programowaniem intuicyjnym inaczej na chybił trafił bądź programowaniem bez udziału świadomości... P.S. suma zer daje zastraszająco wysoką liczbę P.S. suma inteligencji na planecie jest stała, liczba ludności rośnie P.S. przeczytał Ci pierwszy bajt! Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 12, 2008 Autor Zgłoś Share Napisano Grudzień 12, 2008 No i oto mi chodziło aby przeczytał mi liczbę bajtów jaką ma daną w a.read(C,1) a przedtem odczytał mi wszystkie bajty to jak to tu zmieniać . Bo zauważyłem że on to fajnie czyta te bajty, jeśli wyczytamy pierwszy bajt FF to następnym nawet gdy damy aby do innej zmiennej przypisać bajt 1 to przeczyta on bajt drugi z programu << o takie coś mi chodziło. Jeszcze bym miał do was jedno pytanie .. Możecie mi powiedzieć co wpisać aby wsadzić a := TFileStream.Create('kk.bin', fmOpenRead); w miejsce ścieżki plik który wchodzi poprzez button loadfrom2. Czy maksymalnie można odczytać tylko 4 bajty?? Bo jak ustawie na więcej to wywala mi błąd Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Grudzień 12, 2008 Zgłoś Share Napisano Grudzień 12, 2008 zrób dwie referencje i jeden wskaźnik, wsadź w to miejsce i przed użyciem wstrząśnij a przede wszystkim nie zadawaj takich pytań tylko idź się poucz podstaw! Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 12, 2008 Autor Zgłoś Share Napisano Grudzień 12, 2008 No ja wiem ale powiedz co trzeba wstawić w miejsce ścieżki tego pliku co jest w Tfilesteram aby korzystał on z loadfile << ZROBIONE. Możecie mi powiedzieć dlaczego wywala mi błąd Project Project1.exe raised exception class EAcess with message "Acees violation at adres 000000F" Red of adress 000000F.Procesed stop KOD if SaveDialog1.Execute then begin a := TFileStream.Create(g, fmOpenReadWrite); x := SaveDialog1.FileName; b := TFileStream.Create(x, fmCreate); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.free; b.free; Zmienna G to KODg:=ExtractShortPathName(OpenDialog2.FileName ); Pobiera ścieżkę i umieszcza w TfileStream pliku który jest wczytywany do programu Link do komentarza Udostępnij na innych stronach More sharing options...
Dexarz Napisano Grudzień 12, 2008 Zgłoś Share Napisano Grudzień 12, 2008 Sprobuj znależć błąd debuggerem ...Najpierw zaznacz jaką linie ,najlpiej tą na początku i wciśnij F4 ..potem Delphi ,wrbi do kodu z zaznaczeniem i teraz rób ciagle F7 ,dopóki ie wywali błedu ... Tylko chyba to bła w pamieci ,nie wiem ... Aktualnie piszę 32 bitowy system operacyjny. ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40% Stick's Adventure 3 - 0% Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP Przykład programu w ASE2.0: <?arg #CreateProcs; $i:?; #For('$i,10,1,@Lab');@Lab; #Sleep(100); #Message("Ten komputer ulegnie autodestrukcji za $i sekund"); #Retf; #Message('Dead'); arg?> Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 12, 2008 Autor Zgłoś Share Napisano Grudzień 12, 2008 Sprobuj znależć błąd debuggerem ...Najpierw zaznacz jaką linie ,najlpiej tą na początku i wciśnij F4 ..potem Delphi ,wrbi do kodu z zaznaczeniem i teraz rób ciagle F7 ,dopóki ie wywali błedu ... Tylko chyba to bła w pamieci ,nie wiem ... Debuger zaznacza mi to : KOD if SaveDialog1.Execute then Usunąłem SaveDialog1 to wywala też ten sam błąd lecz o innej wartości może błąd znajduje się w tym wczytywaniu danych : KOD a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.Read(c,4); b.Write(c,4); a.Read(c,4); b.Write(c,4); a.Read(c,4); b.Write(c,4); a.Read(c,4); b.Write(c,4); a.Read(c,4); b.Write(c,4); a.Read(c,4); b.Write(c,4); a.Read(c,4); b.Write(c,4); a.Read(c,4); b.Write(c,4); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); a.read(c,1); c := $AA; b.write(c,1); Oczywiście na końcu jest a.Free i b.Free. Próbowałem ten syf zapisać za pomocą pętli : KODwhile i <> 10 do begin a.read(c,1); if c in [0..$50] then c := $AA; b.write(c,1) I := I + 1; a.Free; b.Free; A moglibyście powiedzieć jak działa funkcja position ?? Czy ona odczytuje 10bajt czy 10bajtów w tym przypadku a.position:=10; Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Grudzień 12, 2008 Zgłoś Share Napisano Grudzień 12, 2008 czytaine tego watku jest fascynujace. Jest niczym dobra powiesc kryminalna, im dalej tym badziej zaskakujace zwroty akcji po prostu nie moge sie doczekac finalu. BTW czy ty zastanawiasz sie co robia kolejne linie twojego programu czy wrzucasz losowe kombinacje komend i zmiennych byleby sie kod skompilowal ? Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
alek12 Napisano Grudzień 12, 2008 Autor Zgłoś Share Napisano Grudzień 12, 2008 Wiem co się dzieje, ale żeby to lepiej wyglądało pętli nie mogłem wstawić bo wywala błąd. Czy mógł byś mi powiedzieć do czego służy funkcja position? Czy ona określa np 10 bajtów czy 10 bajt w sytuacji position:=10; Link do komentarza Udostępnij na innych stronach More sharing options...
Cubixmeister Napisano Grudzień 12, 2008 Zgłoś Share Napisano Grudzień 12, 2008 To nie jest funkcja tylko property/własciwość klasy. Position = pozycja, czyli pozycja od której będą czytane/zapisywane następne dane, coś jak karetka (kursor) w edytorach tekstowych. Jeżeli nie znasz angielskiego na tym poziomie to bym tym bardziej sobie odpuścił... No chyba, że masz 12 lat... Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.