Ubuntu Online, Fedora Online, Windows online emulator അല്ലെങ്കിൽ MAC OS ഓൺലൈൻ എമുലേറ്റർ എന്നിങ്ങനെയുള്ള ഞങ്ങളുടെ ഒന്നിലധികം സൗജന്യ ഓൺലൈൻ വർക്ക്സ്റ്റേഷനുകളിലൊന്ന് ഉപയോഗിച്ച് OnWorks സൗജന്യ ഹോസ്റ്റിംഗ് ദാതാവിൽ പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്ന കമാൻഡ് perldbmfilter ആണിത്.
പട്ടിക:
NAME
perldbmfilter - Perl DBM ഫിൽട്ടറുകൾ
സിനോപ്സിസ്
$db = ടൈ %hash, 'DBM', ...
$old_filter = $db->filter_store_key (ഉപ {...} );
$old_filter = $db->filter_store_value(ഉപ {...} );
$old_filter = $db->filter_fetch_key (ഉപ {...} );
$old_filter = $db->filter_fetch_value(ഉപ {...} );
വിവരണം
മുകളിൽ കാണിച്ചിരിക്കുന്ന നാല് "ഫിൽറ്റർ_*" രീതികൾ ഷിപ്പ് ചെയ്യുന്ന എല്ലാ DBM മൊഡ്യൂളുകളിലും ലഭ്യമാണ്
Perl-നൊപ്പം, അതായത് DB_File, GDBM_File, NDBM_File, ODBM_File, SDBM_File.
ഓരോ രീതിയും ഒരേപോലെ പ്രവർത്തിക്കുന്നു, ഒരു DBM ഇൻസ്റ്റാൾ ചെയ്യാൻ (അല്ലെങ്കിൽ അൺഇൻസ്റ്റാൾ ചെയ്യാൻ) ഉപയോഗിക്കുന്നു
ഫിൽട്ടർ ചെയ്യുക. അവ തമ്മിലുള്ള ഒരേയൊരു വ്യത്യാസം ഫിൽട്ടർ ഇൻസ്റ്റാൾ ചെയ്ത സ്ഥലമാണ്.
സംഗ്രഹിക്കുക:
ഫിൽറ്റർ_സ്റ്റോർ_കീ
ഈ രീതി ഉപയോഗിച്ച് ഒരു ഫിൽട്ടർ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെങ്കിൽ, നിങ്ങൾ ഓരോ തവണയും അത് അഭ്യർത്ഥിക്കും
ഒരു DBM ഡാറ്റാബേസിലേക്ക് ഒരു കീ എഴുതുക.
ഫിൽറ്റർ_സ്റ്റോർ_മൂല്യം
ഈ രീതി ഉപയോഗിച്ച് ഒരു ഫിൽട്ടർ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെങ്കിൽ, നിങ്ങൾ ഓരോ തവണയും അത് അഭ്യർത്ഥിക്കും
ഒരു DBM ഡാറ്റാബേസിലേക്ക് ഒരു മൂല്യം എഴുതുക.
filter_fetch_key
ഈ രീതി ഉപയോഗിച്ച് ഒരു ഫിൽട്ടർ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെങ്കിൽ, നിങ്ങൾ ഓരോ തവണയും അത് അഭ്യർത്ഥിക്കും
ഒരു DBM ഡാറ്റാബേസിൽ നിന്ന് ഒരു കീ വായിക്കുക.
filter_fetch_value
ഈ രീതി ഉപയോഗിച്ച് ഒരു ഫിൽട്ടർ ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെങ്കിൽ, നിങ്ങൾ ഓരോ തവണയും അത് അഭ്യർത്ഥിക്കും
ഒരു DBM ഡാറ്റാബേസിൽ നിന്ന് ഒരു മൂല്യം വായിക്കുക.
ഒന്നുമില്ല എന്നതിൽ നിന്ന് നാലെണ്ണം വരെയുള്ള ഏത് രീതികളും നിങ്ങൾക്ക് ഉപയോഗിക്കാം.
എല്ലാ ഫിൽട്ടർ രീതികളും നിലവിലുള്ള ഫിൽട്ടർ നൽകുന്നു, അല്ലെങ്കിൽ ഇല്ലെങ്കിൽ "undef".
ഒരു ഫിൽട്ടർ ഇല്ലാതാക്കാൻ അതിലേക്ക് "undef" പാസ് ചെയ്യുക.
ദി അരിപ്പ
ഓരോ ഫിൽട്ടറും പേൾ വിളിക്കുമ്പോൾ, $_ ന്റെ പ്രാദേശിക പകർപ്പിൽ കീ അല്ലെങ്കിൽ മൂല്യം അടങ്ങിയിരിക്കും
ഫിൽട്ടർ ചെയ്തു. $_ ന്റെ ഉള്ളടക്കം പരിഷ്ക്കരിച്ചാണ് ഫിൽട്ടറിംഗ് സാധ്യമാക്കുന്നത്. എന്നതിൽ നിന്നുള്ള റിട്ടേൺ കോഡ്
ഫിൽട്ടർ അവഗണിക്കപ്പെട്ടു.
An ഉദാഹരണം: The NULL അവസാനിപ്പിക്കുക പ്രശ്നം.
DBM ഫിൽട്ടറുകൾ നിങ്ങൾ എവിടെയുള്ള പ്രശ്നങ്ങളുടെ ഒരു ക്ലാസ് ഉപയോഗപ്രദമാണ് എല്ലായിപ്പോഴും അതുതന്നെ ഉണ്ടാക്കാൻ ആഗ്രഹിക്കുന്നു
എല്ലാ കീകളിലേക്കും, എല്ലാ മൂല്യങ്ങളിലേക്കും അല്ലെങ്കിൽ രണ്ടിലേക്കും പരിവർത്തനം.
ഉദാഹരണത്തിന്, ഇനിപ്പറയുന്ന രംഗം പരിഗണിക്കുക. നിങ്ങൾക്ക് ആവശ്യമുള്ള ഒരു DBM ഡാറ്റാബേസ് ഉണ്ട്
ഒരു മൂന്നാം കക്ഷി സി ആപ്ലിക്കേഷനുമായി പങ്കിടുക. സി ആപ്ലിക്കേഷൻ അനുമാനിക്കുന്നു എല്ലാം കീകളും മൂല്യങ്ങളും
NULL അവസാനിപ്പിച്ചു. നിർഭാഗ്യവശാൽ, DBM ഡാറ്റാബേസുകളിലേക്ക് പേൾ എഴുതുമ്പോൾ അത് NULL ഉപയോഗിക്കുന്നില്ല
അവസാനിപ്പിക്കൽ, അതിനാൽ നിങ്ങളുടെ Perl ആപ്ലിക്കേഷന് NULL ടെർമിനേഷൻ തന്നെ കൈകാര്യം ചെയ്യേണ്ടിവരും. എപ്പോൾ
നിങ്ങൾ ഡാറ്റാബേസിലേക്ക് എഴുതുന്നത് ഇതുപോലുള്ള ഒന്ന് ഉപയോഗിക്കേണ്ടി വരും:
$hash{"$key\0"} = "$value\0";
അതുപോലെ നിങ്ങൾ ദൈർഘ്യം പരിഗണിക്കുമ്പോൾ NULL കണക്കിലെടുക്കേണ്ടതുണ്ട്
നിലവിലുള്ള കീകൾ/മൂല്യങ്ങൾ.
പ്രധാനമായി NULL അവസാനിപ്പിക്കൽ പ്രശ്നം നിങ്ങൾക്ക് അവഗണിക്കാൻ കഴിയുമെങ്കിൽ അത് വളരെ മികച്ചതായിരിക്കും
ആപ്ലിക്കേഷൻ കോഡ് കൂടാതെ എല്ലാവരിലേക്കും അവസാനിപ്പിക്കുന്ന NULL സ്വയമേവ ചേർക്കുന്ന ഒരു മെക്കാനിസം ഉണ്ട്
നിങ്ങൾ ഡാറ്റാബേസിലേക്ക് എഴുതുകയും വായിക്കുമ്പോൾ അവ നീക്കം ചെയ്യുകയും ചെയ്യുമ്പോഴെല്ലാം കീകളും മൂല്യങ്ങളും
ഡാറ്റാബേസിൽ നിന്ന്. നിങ്ങൾ ഇതിനകം ഊഹിച്ചിട്ടുണ്ടെന്ന് എനിക്ക് ഉറപ്പുണ്ട്, ഇത് DBM ന്റെ ഒരു പ്രശ്നമാണ്
ഫിൽട്ടറുകൾ വളരെ എളുപ്പത്തിൽ പരിഹരിക്കാനാകും.
കർശനമായി ഉപയോഗിക്കുക;
മുന്നറിയിപ്പുകൾ ഉപയോഗിക്കുക;
SDBM_File ഉപയോഗിക്കുക;
Fcntl ഉപയോഗിക്കുക;
എന്റെ % ഹാഷ്;
എന്റെ $ഫയലിന്റെ പേര് = "ഫിൽറ്റ്";
$filname അൺലിങ്ക് ചെയ്യുക;
എന്റെ $db = ടൈ(%hash, 'SDBM_File', $filename, O_RDWR|O_CREAT, 0640)
അല്ലെങ്കിൽ മരിക്കുക "$filname: $!\n തുറക്കാൻ കഴിയില്ല";
# DBM ഫിൽട്ടറുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക
$db->filter_fetch_key (ഉപ {s/\0$// } );
$db->filter_store_key (ഉപ {$_ .= "\0"} );
$db->filter_fetch_value(
ഉപ { മുന്നറിയിപ്പുകളൊന്നുമില്ല 'ഇനിഷ്യലൈസ്ഡ്'; s/\0$// } );
$db->filter_store_value( ഉപ {$_ .= "\0"} );
$hash{"abc"} = "def";
എന്റെ $a = $hash{"ABC"};
#...
undef $db;
%ഹാഷ് അഴിക്കുക;
മുകളിലുള്ള കോഡ് SDBM_File ഉപയോഗിക്കുന്നു, എന്നാൽ ഇത് ഏതെങ്കിലും DBM മൊഡ്യൂളുകളിൽ പ്രവർത്തിക്കും.
ഓരോ ഫിൽട്ടറുകളുടെയും ഉള്ളടക്കം സ്വയം വിശദീകരിക്കുന്നവയായിരിക്കണമെന്ന് പ്രതീക്ഷിക്കുന്നു. രണ്ടും "എടുക്കുക"
ഫിൽട്ടറുകൾ അവസാനിപ്പിക്കുന്ന NULL നീക്കം ചെയ്യുന്നു, കൂടാതെ രണ്ട് "സ്റ്റോർ" ഫിൽട്ടറുകളും ഒരു അവസാനിപ്പിക്കുന്ന NULL ചേർക്കുന്നു.
മറ്റൊരു ഉദാഹരണം: കീ is a C int
മറ്റൊരു യഥാർത്ഥ ജീവിത ഉദാഹരണം ഇതാ. സ്ഥിരസ്ഥിതിയായി, ഒരു ഡിബിഎം ഡാറ്റാബേസിലേക്ക് പേൾ എഴുതുമ്പോഴെല്ലാം
എല്ലായ്പ്പോഴും കീയും മൂല്യവും സ്ട്രിംഗുകളായി എഴുതുന്നു. അതിനാൽ നിങ്ങൾ ഇത് ഉപയോഗിക്കുമ്പോൾ:
$hash{12345} = "എന്തെങ്കിലും";
12345 എന്ന കീ DBM ഡാറ്റാബേസിൽ 5 ബൈറ്റ് സ്ട്രിംഗ് "12345" ആയി സംഭരിക്കപ്പെടും. നിങ്ങൾ എങ്കിൽ
യഥാർത്ഥത്തിൽ കീ DBM ഡാറ്റാബേസിൽ ഒരു C int ആയി സൂക്ഷിക്കാൻ ആഗ്രഹിക്കുന്നു, നിങ്ങൾ ഉപയോഗിക്കേണ്ടതുണ്ട്
എഴുതുമ്പോൾ "പാക്ക്", വായിക്കുമ്പോൾ "അൺപാക്ക്".
ഇത് ചെയ്യുന്ന ഒരു DBM ഫിൽട്ടർ ഇതാ:
കർശനമായി ഉപയോഗിക്കുക;
മുന്നറിയിപ്പുകൾ ഉപയോഗിക്കുക;
DB_File ഉപയോഗിക്കുക;
എന്റെ % ഹാഷ്;
എന്റെ $ഫയലിന്റെ പേര് = "ഫിൽറ്റ്";
$filname അൺലിങ്ക് ചെയ്യുക;
എന്റെ $db = ടൈ %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666,
$DB_HASH അല്ലെങ്കിൽ മരിക്കുക "$ഫയലിന്റെ പേര് തുറക്കാൻ കഴിയില്ല: $!\n";
$db->filter_fetch_key (ഉപ {$_ = unpack("i", $_)} );
$db->filter_store_key (ഉപ {$_ = പായ്ക്ക് ("i", $_)} );
$hash{123} = "def";
#...
undef $db;
%ഹാഷ് അഴിക്കുക;
മുകളിലുള്ള കോഡ് DB_File ഉപയോഗിക്കുന്നു, എന്നാൽ ഇത് വീണ്ടും ഏതെങ്കിലും DBM മൊഡ്യൂളുകളിൽ പ്രവർത്തിക്കും.
ഇത്തവണ രണ്ട് ഫിൽട്ടറുകൾ മാത്രമാണ് ഉപയോഗിച്ചിരിക്കുന്നത്; എന്നതിന്റെ ഉള്ളടക്കങ്ങൾ മാത്രം കൈകാര്യം ചെയ്യേണ്ടതുണ്ട്
കീ, അതിനാൽ ഏതെങ്കിലും മൂല്യമുള്ള ഫിൽട്ടറുകൾ ഇൻസ്റ്റാൾ ചെയ്യേണ്ട ആവശ്യമില്ല.
onworks.net സേവനങ്ങൾ ഉപയോഗിച്ച് perldbmfilter ഓൺലൈനായി ഉപയോഗിക്കുക