Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Szukanie stringa w pliku binarnym

Ostatnio zmodyfikowano 2014-07-20 17:18
Autor Wiadomość
Haker123
Temat założony przez niniejszego użytkownika
[C++] Szukanie stringa w pliku binarnym
» 2014-07-19 23:50:30
Witam.

Chce zrobic kod ktory bedzie wyszukiwal odpowiedniego stringa w pliku binarnym.

Znalazlem cos takiego :

C/C++
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main( int argc, char * argv[] )
{
    std::ifstream ifs( argv[ 1 ], ios::binary );
   
    std::string str(( std::istreambuf_iterator < char >( ifs ) ), std::istreambuf_iterator < char >() );
   
    size_t pos = str.find( argv[ 2 ] );
   
    if( pos != string::npos )
         cout << "string found at position: " << int( pos ) << endl;
    else
         cout << "could not find string" << endl;
   
    return 0;
}
Ale im wiecej czytam o "std::istreambuf_iterator<char>(ifs)" tym mniej rozumiem do czego to sluzy.
Czytalem ze mozna kozystac rowniez z "istream_iterator" czym one sie roznia i ktore jest lepsze?

Bede wdzieczny jesli ktos moglby mi to wyjasnic , albo podac jakas strone gdzie bedzie jasno napisane co i jak.

PS. Czy na stronie nie dziala wyszukiwanie?? Nawet jak wpisuje C++ albo ALLEGRO to nic mi nie wyskakuje.
P-114089
Moorfox
» 2014-07-20 00:01:10
Uzyj lepiej funkcji C

C/C++
#include <cstdio>
#include <string>

using namespace std;

int main( int argc, char ** argv )
{
    if( argc != 3 ) return 1;
   
    FILE * f;
    char str[ 50 ];
   
    f = fopen( argv[ 1 ], "rb+" );
    do
    {
        fscanf( f, "%s", str );
    } while( strcmp( argv[ 2 ], str ) );
   
    printf( "%s", str );
    fclose( f );
    return 0;
}

Odrazu adnotacja do pekfosa - nie kompilowalem nie wiem czy dziala pisalem kod na szybko wiec jakosc nie zachwyca zabezpieczen tez nie ma np. gdyby nie bylo stringa w pliku, moglbym zrobic !feof(f) ale mi sie juz nie chce. Czepiaj sie znowu wisi mi to od teraz.
P-114090
Mateus.
» 2014-07-20 09:48:48
@haker123 wyszukiwanie na stronie nie działa gdy masz wyłączone pliki cookie. Jeśli tak jak ja nie chcesz ich akceptować to zrób wyjątek w opcjach internetowych dla tej strony.
P-114091
Gabes
» 2014-07-20 10:22:35
Jeśli potrzebujesz do Allegro5 to możemy korzystać z  ALLEGRO_FILE
C/C++
#include <allegro5/allegro.h>
#include <allegro5/allegro_font.h>
int main()
{
    al_init();
    al_init_font_addon();
    al_install_keyboard();
    al_install_mouse();
    ALLEGRO_KEYBOARD_STATE klawiatura;
    ALLEGRO_DISPLAY * okno = al_create_display( 600, 400 );
    ALLEGRO_FONT * font8 = al_create_builtin_font();
    int liniaY = 10; ALLEGRO_USTR * tekst;
    al_clear_to_color( al_map_rgb( 255, 255, 255 ) );
    ALLEGRO_FILE * plik = al_fopen( "€uroGęś.cpp", "r" ); // Otwiera plik.
    while( !al_key_down( & klawiatura, ALLEGRO_KEY_ESCAPE ) )
    {
        al_get_keyboard_state( & klawiatura );
        tekst = al_fget_ustr( plik );
        al_ustr_rtrim_ws( tekst ); //usuwa z prawej
        al_draw_ustr( font8, al_map_rgb( 0, 0, 0 ), 0, liniaY, 0, tekst );
        //if(!al_feof(plik))  liniaY+=8+4;
        if( al_ustr_append_chr( tekst, ' ' ) ) liniaY += 8 + 4;
       
        al_flip_display();
    }
    al_fclose( plik ); // zamyka dany plik.
    al_destroy_display( okno );
    return 0;
}
http://www.dropbox.com/s​/eml2m45tzhbi3hq/A5.zip?dl=1
P-114092
Monika90
» 2014-07-20 11:02:01
skoro już wszyscy wrzucają tu jakiś kod, to ja też wrzucę
C/C++
#include <boost/interprocess/file_mapping.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <string>
#include <algorithm>
#include <iostream>
namespace bi = boost::interprocess;

int main()
{
    bi::file_mapping file( "a.out", bi::read_only );
    bi::mapped_region region( file, bi::read_only );
    auto beg = static_cast < const char *>( region.get_address() );
    auto end = beg + region.get_size();
    std::string phrase = "zugzwang";
    auto i = std::search( beg, end, phrase.begin(), phrase.end() );
    if( i != end )
         std::cout << phrase << " found at offset " << i - beg << '\n';
   
}
nawet działa: http:/​/coliru.stacked-crooked.com/a​/e3f565b0494bb05c
P-114093
Haker123
Temat założony przez niniejszego użytkownika
» 2014-07-20 14:20:46
Przyznam sie bez bicia ze aktualnie potrzebuje tego kodu do pliku z mapa dla gry napisanej w ALLEGRO , ale chce napisac uniwersalny kod do kazdego programu ;]

Najbardziej czytelny jest dla mnie kod napisany w BOOST i mam pytanie gdzie moge znalesc jakis dobry tutorial do tej biblioteki??

Wlasnie przejrzalem dokumentacje ale jest ona wielka i jak narazie zabardzo pokrecona dla mnie ,  przydal by mi sie jakis wstep do biblioteki.

PS. Mateus dzieki za informacje ;]
P-114116
pekfos
» 2014-07-20 14:30:13
mam pytanie gdzie moge znalesc jakis dobry tutorial do tej biblioteki??
Najprawdopodobniej taki nie istnieje.
P-114118
Haker123
Temat założony przez niniejszego użytkownika
» 2014-07-20 16:55:03
Czyli jedynym sposobem na nauczenie sie tej biblioteki to dokumentacja na stronie http://www.boost.org/ ??
P-114127
« 1 » 2
  Strona 1 z 2 Następna strona