- UID
- 1023
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
- // Nov 14, 2008 - by Euyis
! C6 F, ^2 G% g0 W - ( ?) ?& p3 E* F# c8 K
- //
8 P# z% Z5 {$ b$ O& s/ ] - // I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.1 v7 B- B9 T6 H8 s
- // In case this is not legally possible,
, D- _, \$ o# L1 }" I - // I grant any entity the right to use this work for any purpose, without any conditions, unless such conditions are required by law.
( h- h% `" {& z1 \9 k - //2 ]7 U- H0 c, X! h9 A
- $ Q, a$ g$ \9 p" Q. p7 a
- #include <iostream>' n3 s8 w7 _8 y7 ?
- #include <fstream>
" i+ D9 Y' Z) _ X - #include <cctype>( g( ], h0 T. Z" U/ F
- using namespace std;
* p, W% \+ j9 M: d" N - , y, T- P# G- z( j1 A
- // MACROS2 |5 P; m' p5 ~0 v
- #define SYSTEM_BLOCK_STR "[system]"
! Y* [1 R0 ~9 z6 N+ e5 C9 R! x0 A2 c - #define NICKNAME_STR "nickname = "2 S2 W7 U( w& V
- #define IDS_STR "strid_name = "
" B7 m$ ~! {. ~; M$ N/ ^1 d% v - //4 o( D% N5 t. d( k+ s# H1 Q
4 Y; V V4 e, F5 L2 @3 Z2 Q- ifstream inf;0 Y5 F+ x/ F* m |4 b7 Z
- char *buffer;
' B s2 ?6 h' I- v' X& g - 1 O; J' b* u* {' _9 K
- int main(int argc, char *argv[])& a: g8 b' C* g# \, B) x" T
- {0 q8 c" I8 R3 N9 r( n
- int i;
/ e$ C+ V" D5 D1 y - & U7 f% y4 J( m, R, [9 R
- if(argc!=2){
4 v( q5 T: D/ Z: q - cout << "This program requires one and only one argument.";7 o z5 u+ u2 y/ U% l
- return -1;
4 W; w9 \1 B' f) c5 H: t - }9 Y" N8 x3 J7 H* U1 G
- , `: p! M( x6 I- u% y5 j- o
- inf.open(argv[1], ios_base::in | ios_base::ate);5 ]7 T; S6 J3 a& s# ]+ N
- if(!inf) {: L; f' v2 ^2 q0 I
- cout << "Error opening file.";
3 O) Y' E; J, U( f0 U% O+ F - return -1;
- C9 P* R" N8 L' k2 { - }
8 _6 s$ D7 i7 x9 d3 O$ }2 R -
2 S4 ~& P! k4 o+ A6 {$ o - int streamLength = inf.tellg();
7 y7 c' X# u5 _9 ~ - if(streamLength!=-1) {
8 `3 y* `2 e+ I/ d+ a& _ - inf.seekg(0, ios::beg);
$ V) m5 Y# A7 z8 o0 G8 h ^" _ -
% n, c( Z+ |2 n9 V) H - buffer = new char [streamLength];
% c0 \$ |- Z5 z$ m - // Read file;& x$ e& G% \! O9 b
- for(i=0;i<streamLength;i++) {
" d C r% L% t& d$ W/ l - inf.get(buffer[i]);% ?1 t# k, I9 B+ _5 \: f, ^
- buffer[i] = tolower(buffer[i]);
& S N' ^" j3 T4 k2 B - }9 L, L- d# W" |
-
& W0 o: _+ q+ f2 P. v - /* For testing" w! z7 J* f1 g% V. x7 }; d
- for(i=0;i<streamLength;i++) {
" F4 p" M" O8 [- y! T$ G. A - cout << buffer[i];
( e0 y8 f I c9 F! i2 h - }( t6 |. d& l# G
- */5 A; D I! `+ d' q, q. G: Z
- }
# k+ x- r( b `3 @9 u* W, a - else {* i E6 f' @1 {* k4 |, n
- cout << "Failed to read file." << endl;
. l, c- X& _0 x) D3 l- n - return -1;
V0 u! ^! r4 P$ L - }
: c) x6 ~- E2 Q$ [) L7 W7 N - " Q) d7 `6 w1 ^
- string processStr (buffer);
% j9 K8 B( Y) m/ G+ _9 V - delete [] buffer;4 |- q I) Q4 s- i
- - J6 f4 ?7 X# e0 F
- // DUMB DUMB DUMB....
5 S( R; d6 Z3 w0 B - - m" O0 i1 v( ^; `+ Q! j
- int nextSearchPos = 0;
/ t1 u8 ]% z9 N- n, I3 Y R - int tmpSearchPos[2] = {0};
# O' q. X( N2 H' U' W* Z' ` d5 s" a - int entriesCount = 0;* Q( @' j- ^/ O
-
5 ~2 T9 B' q7 ^ - 4 N" k p$ v5 x5 |0 T- R$ n
-
* W. _0 N9 g& F: ]- {3 |% G; J - while(processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)!=string::npos) {
; ]) |% T& h k4 u - nextSearchPos = processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)+8;( H( ^" R( {2 r7 b% f6 W0 C
- tmpSearchPos[0] = processStr.find(NICKNAME_STR, nextSearchPos);
. o+ i( I* [" U+ Q" J4 O - tmpSearchPos[1] = processStr.find(IDS_STR, nextSearchPos);+ @ e5 u; k* L: K) T% h
- " b, o( q( I v' c$ N# k" k+ Z
- if(tmpSearchPos[0]!=string::npos) {) }4 M, L6 U) j* n& E2 u Q
- i=tmpSearchPos[0]+11;
$ n0 Z T6 m3 I- J) D9 ^ - 0 A) B) o* s3 Q; a
- while(processStr[i]!='\n' && processStr[i]!='\r') {/ l/ y3 y! q1 q
- cout << processStr[i];+ y* w2 r O# w% v: E0 G
- i++;2 R5 @/ a; k, p
- }% P9 r* Y# H8 i5 {/ l
-
0 E4 s8 U, k* |. {# _! n* { - cout << endl;* h7 l. v! h, ?# M" c. Q; _/ r
- ! x$ R9 e0 y2 p
- }
: N$ b6 [" [. v -
' |- T, t. m" _( ~9 `" a( u - if(tmpSearchPos[1]!=string::npos) {6 n( \" N' e ]: x9 w3 O
- i=tmpSearchPos[1]+13;: S1 t6 z- T& W3 o% X
- - ~, x0 s! v& y2 G ^
- while(processStr[i]!='\n' && processStr[i]!='\r') {
' V- h: \; X& I- y! f9 r; t! ?7 H7 r - cout << processStr[i];; Z& A6 A/ N; W, U' E/ W
- i++;% t; C, F" i: A
- }& _) a0 u# ~( q/ t
-
6 I0 t+ B4 c0 z( R - cout << endl;2 C6 T) T4 l! T& F5 e& Q) b+ ]
- * w+ B/ C: N" o) n" g# e
- }
" O4 c6 U8 |" h. ]- o9 O! V -
: w9 I' B6 M3 e t, m - entriesCount++;8 ]$ E, o( d( D, }
- }
5 ]) W2 s! P4 |9 w) @ - & \6 c7 m- W) ~9 [7 R5 B
- cout<<entriesCount;0 H) f8 K9 A& w. l
- return 0;& C9 R5 ]8 V4 N$ R1 x
- 1 b2 E* K* m9 X
- }
复制代码 Update: 最后一行输出条目数.0 {' v! Y H" |% ?3 a/ d
7 [) k: `' m( G g[ 本帖最后由 Euyis 于 2008-11-14 22:21 编辑 ] |
|