- UID
- 1023
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
- // Nov 14, 2008 - by Euyis
2 q# n" U+ }9 z5 ?/ C
+ W5 c. F. }6 g' G v* Q2 O- //
, p/ W5 y# V ?. ` - // I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.
; a( S' _9 ~ B - // In case this is not legally possible,
7 `6 y4 k+ y. p8 H" w# H - // I grant any entity the right to use this work for any purpose, without any conditions, unless such conditions are required by law." S7 y& s+ i1 b4 @
- //
- P6 ?) s" S% \! B+ v( y2 U' t" w% ]
1 w( ~$ k Y6 |2 l- #include <iostream>% o6 a5 |0 c, s) B% F& K" |
- #include <fstream>3 I( {( E1 e9 w/ t; Q7 Z
- #include <cctype>
" @# U2 N, a* }4 I - using namespace std;! L% y) V5 ?1 G3 D; \
0 `6 H V# d; ~' L7 Z9 b- // MACROS7 ^+ H4 f4 m& j5 X w; o
- #define SYSTEM_BLOCK_STR "[system]"
% j: }! C. E4 p6 \6 [' L1 O - #define NICKNAME_STR "nickname = "
4 A1 ]5 T6 n8 C7 P - #define IDS_STR "strid_name = "
% J9 O3 N- I: z$ u, U2 }/ V- j - //
7 E4 S1 O: w1 w" z3 b - 1 J( I2 I) l7 [$ a3 k
- ifstream inf;
; r8 p; M$ d- M$ r3 t7 N+ H# z - char *buffer;
0 ]; U V/ e: X/ Y8 d$ O - / t( s, _' N/ |! e1 R& r
- int main(int argc, char *argv[])
5 T) x9 ^; @3 f- M1 Z& m - {. M/ Z+ N1 C G0 ^ s
- int i;
6 ~2 a: N' |2 O$ N1 T - ! }1 U! E0 S# g- k
- if(argc!=2){
: }% E6 g+ a. M6 I: K: S - cout << "This program requires one and only one argument.";
( E3 E1 Y3 j" z: ^ - return -1;- x& i& Q2 l# `& W* {! e5 T& F
- }
! V5 \/ N- q) g! x - " K1 }4 F% m2 w9 s9 o; f
- inf.open(argv[1], ios_base::in | ios_base::ate);
5 s9 h1 k3 a# I' P7 ] - if(!inf) {
- A# C( n; F0 p# D3 `) x7 p - cout << "Error opening file.";
+ S8 u' D5 h. K3 g& h& O - return -1;
, N- x- M' u9 O7 Z1 m) a/ I2 b - }1 o4 j( y6 n$ G2 E
- ' ~, x1 D0 d9 }" s) G$ K% z2 N
- int streamLength = inf.tellg();; i+ U6 B; i2 X" b
- if(streamLength!=-1) {4 \( n8 n2 W9 A) b) B3 [, a
- inf.seekg(0, ios::beg);
) U4 J+ y$ H2 F: v- [/ f$ f) ?3 j, v -
& ^& d9 ^: {& r" T - buffer = new char [streamLength];
' S' u$ ? Y5 @ Z8 n+ h# S - // Read file;
- K8 [$ n2 M# L) ~ - for(i=0;i<streamLength;i++) {
. U! R# g/ g6 u& _5 E/ u1 {* F - inf.get(buffer[i]);0 Z! v" N, A- r4 }
- buffer[i] = tolower(buffer[i]);: |$ g2 i* Z e4 o* m" a
- }
& J+ R2 R8 y2 n& N2 g - : Y/ Z1 `+ h/ e3 D. o! Z8 ~7 ]
- /* For testing. k" N6 f5 M8 r
- for(i=0;i<streamLength;i++) {
6 L6 L5 V( W! A8 k5 J - cout << buffer[i];
* X* O i2 r$ h ]$ j! H2 A - }0 t3 v& r2 @9 k
- */' Y. t F( S1 e9 \! C6 L! a
- }. f& u* n2 Q9 E5 m1 F8 P. V2 r
- else {
1 V3 R f4 c6 r1 V - cout << "Failed to read file." << endl;
7 {6 [ Z) v! U' u. [2 T ~ - return -1;- W& l3 r7 t% n( Y" K+ U+ ]
- }5 ^: {7 Y1 h0 b7 {6 J+ o
-
5 [& L2 Y5 ^, X. h6 D# a - string processStr (buffer);
4 p5 [! D0 t, b% E0 z8 V3 A7 \; P4 R - delete [] buffer;
$ w, t' A5 f7 y0 m5 U -
. Q/ J& h+ \/ ~7 D8 b - // DUMB DUMB DUMB....+ P8 l0 p. H5 }0 \4 U6 ~! {: t
- 7 z2 P$ c% \* O! S& h$ x
- int nextSearchPos = 0;
B# r% y" P! _3 {( e! Y, O3 h - int tmpSearchPos[2] = {0};0 S$ y6 A' r: F9 g' B$ U
- int entriesCount = 0;
4 C# F' c2 `3 t: S9 n( [( T2 W) t -
5 U8 p, N. w( |9 r8 e- Q. W& @ - ; v; o+ [% I+ _7 }% d3 l7 C
-
' `8 [8 Z* C2 n( J5 ] - while(processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)!=string::npos) {
. C4 v6 {3 l/ t- i3 R- {/ `# \% L - nextSearchPos = processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)+8;
$ h! F3 \; H3 l. Q. H5 R) w8 M - tmpSearchPos[0] = processStr.find(NICKNAME_STR, nextSearchPos);1 t& J& W7 C3 a. U6 N
- tmpSearchPos[1] = processStr.find(IDS_STR, nextSearchPos);# b5 u4 s' X. O, G) m5 H4 B" V5 O
- % P! o1 U) V/ P9 A9 i
- if(tmpSearchPos[0]!=string::npos) {. P* W0 j: m2 T1 ?
- i=tmpSearchPos[0]+11;
: n% ~- \ [ T& a - $ y$ a6 K% j: q6 P% B. d2 s
- while(processStr[i]!='\n' && processStr[i]!='\r') {
: M" }; Z$ S+ v: I - cout << processStr[i];
P: t" W: Y2 L) u% j! p& ` - i++;
0 F* x' M. C: c4 l& F) S4 u - }+ ^3 O( v& y/ w
-
6 U/ e$ I8 a: |/ l - cout << endl;5 x/ U9 _ T3 h
-
0 A. k# d# c; L* z - }' w1 y% C7 D8 N) b0 Z: g- z
- - A* ]" R; c3 k* o* U
- if(tmpSearchPos[1]!=string::npos) {
/ ]( F8 L+ o9 y, M" t7 i - i=tmpSearchPos[1]+13;
# m; U( i+ h7 z3 k' M4 Y( J - : |/ i$ c6 F9 I8 C& K: h, M7 y
- while(processStr[i]!='\n' && processStr[i]!='\r') {* j; n% P# {% W7 e) N. z0 L7 P+ {2 M
- cout << processStr[i];
6 ~: @9 R5 p% z% U3 g; H) q& k - i++;" a3 O A& K g
- }6 _$ }2 S4 O6 M3 W( ]; [
- 3 ^. l1 s* j- Y, N c
- cout << endl;; l+ n2 R) {% `- R; W% N4 G" F
- + Y$ f; ~& l3 R' {; j$ s# i) p2 D- C
- }/ @' D( p5 W* `* E. ^- f1 \: p
- ( H& C2 u" Q& F
- entriesCount++;3 m# B( S& {7 P/ r# v. Z
- }
+ t$ X& g/ G1 H" x -
# ` e- L. q/ P; `# V - cout<<entriesCount;/ h. t$ U" _: ]7 j. h* b
- return 0;: y& g9 H9 N7 e3 v t. L
-
2 d/ U8 v7 \- M+ H* l7 ` - }
复制代码 Update: 最后一行输出条目数. z i# ? R/ k$ U* b
& C& x) g! m2 ~) R0 j9 o[ 本帖最后由 Euyis 于 2008-11-14 22:21 编辑 ] |
|