- UID
- 1023
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
- // Nov 14, 2008 - by Euyis
6 C% F3 i" A3 I. U - ' q! G" o2 N2 a) J
- //+ E# S# k5 ~: a1 e( ?- p7 c) h) G
- // I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.
$ v8 T# K' `- |" r3 b% E - // In case this is not legally possible,; g! V/ d" X' K7 k
- // I grant any entity the right to use this work for any purpose, without any conditions, unless such conditions are required by law.0 t3 q# l5 X$ r5 O/ q
- //2 S" t g+ G' t: ]* o( u
r! a0 F2 V2 ^1 C* d6 ~1 T- #include <iostream>7 F: Z+ \1 V9 j
- #include <fstream>2 k- }* ?8 ]# {2 O
- #include <cctype>
0 e7 `* ^( C. d( o7 B1 M. o - using namespace std;& u( L8 m/ \- O2 n4 a4 N& r% j ^
- 0 L- F% i) F0 C0 q2 n$ _4 {* ~& W
- // MACROS
( _! \& x1 x7 L4 ^( n# H - #define SYSTEM_BLOCK_STR "[system]"
+ E0 R+ a& b7 c/ }" T( ] - #define NICKNAME_STR "nickname = "" G9 ]6 C) w8 `
- #define IDS_STR "strid_name = "
* {! R! l; X* C - //
: R1 X/ k1 }" I: w& g
8 ?% e' O! P, [8 x1 _- a& P% P- ifstream inf;
, F8 X7 z4 v8 r/ u2 l& k1 o - char *buffer;
7 J# E( |# }! @. N$ m2 ?
( s) C+ g; {4 |; P3 I- ~- int main(int argc, char *argv[])9 l' X# M, u- K" c9 _# W0 ~
- { m! U% w7 s9 ?. y6 J
- int i;5 d$ |7 y4 w- d$ U
-
; C T3 y: E/ e) B3 F3 [6 `9 X* F - if(argc!=2){
" T' D; e' i8 I2 @8 f- e. R. W* } - cout << "This program requires one and only one argument.";
1 o% P8 y# U& q- E - return -1;1 v% T. }" X1 }# S5 `
- }
% ?; P) R3 r& L) H5 p' @ - ) ]7 W. @, P* a7 g0 p. X
- inf.open(argv[1], ios_base::in | ios_base::ate);: a9 J4 F( p7 z
- if(!inf) {' u* h; r8 v# T. m
- cout << "Error opening file.";
9 e9 [0 N) s, y% z- w - return -1;3 F( q: |/ d- P5 v! I
- }
3 _- Q5 P6 |2 f% w8 k/ z; x. Y - % m' q. o. C4 ~ C! f$ v' q2 H
- int streamLength = inf.tellg();
. W9 A. [8 E) e- H* ^) P - if(streamLength!=-1) {
) |0 N' {' g. |, Q5 j L }% A - inf.seekg(0, ios::beg);
0 A# u9 B/ d6 d) z; Z - 1 x) ^5 \# l1 M, @5 X3 N
- buffer = new char [streamLength];
- ~' r \7 Y6 L) v8 v! |% H# s$ { ~( e - // Read file;' \9 {) k; [ s. I' e) C
- for(i=0;i<streamLength;i++) {
6 |6 K' U) z/ ~: E - inf.get(buffer[i]);6 v& C8 S- z& H) Y
- buffer[i] = tolower(buffer[i]);
8 g9 ]) l Q# i# _; d1 \$ D, V- c - }- y5 S7 ] Q- p d4 a
- ; _, u; K H$ u3 f* T( o
- /* For testing9 O8 G# K3 \. |- b A8 I
- for(i=0;i<streamLength;i++) {2 W0 G. \+ ~( _0 R, {
- cout << buffer[i];
3 F; f+ S& m; ]5 s4 _7 Y* u - }
* F1 l7 c; W& M" L( f! X - */
: x2 ^. I' s$ J7 f - }# Z2 E3 c6 j5 u
- else {2 X) B; K5 t8 _" x6 w$ _' d
- cout << "Failed to read file." << endl;! \4 N. r X+ | P, c9 ~& u1 q2 Q" i
- return -1;* E. z7 ?' V+ x. J
- }; }2 G3 C* ?& N X5 b0 \0 d) E7 F
-
7 {; F) [* @: t: z$ ]7 r% C - string processStr (buffer);5 s! x$ W: _' k1 j. E
- delete [] buffer;
, l8 o0 `) x9 M" [ - " C3 J. |1 |1 M
- // DUMB DUMB DUMB....0 N4 x& H/ l5 }" N* @& N) s! ^
-
/ {' r. S0 Q0 D - int nextSearchPos = 0;! o- |; X9 f' o/ P- o" t& N- X. |# W
- int tmpSearchPos[2] = {0};
4 S7 ]1 a" K* e/ y- s - int entriesCount = 0;- F" @ N Y5 Z: i0 H) r& {" C6 C0 n
-
2 ~3 `1 _# k' H7 } -
! i n1 ~- q v: @- h$ k - $ E! u: s7 e! T1 S& @1 L# J
- while(processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)!=string::npos) {
5 Z/ B% X6 U6 Z. S) g - nextSearchPos = processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)+8;
* X+ D. q' H/ P, }2 }8 [ - tmpSearchPos[0] = processStr.find(NICKNAME_STR, nextSearchPos);! h0 v! Z4 z8 J3 s
- tmpSearchPos[1] = processStr.find(IDS_STR, nextSearchPos);* M0 ?1 \8 A# V% P' n
-
& V; r$ @9 ^' Q2 O+ R' O: n - if(tmpSearchPos[0]!=string::npos) {
& }( N" R7 h* \- X0 j* v1 f - i=tmpSearchPos[0]+11;, J& B( J! K7 x6 Y% h
-
' u6 o: N5 u& ? - while(processStr[i]!='\n' && processStr[i]!='\r') {$ |# K9 z1 C6 Y0 x1 l- X r% g, Y% D
- cout << processStr[i];0 n& c: Z; I d2 |( m' T" T/ {
- i++;* V1 E. v* f1 b
- }
; w2 C" F+ L! _5 G# p$ l6 n# ? - ' `# N! ]6 V* ]7 p
- cout << endl;$ `# J& A! } p* R6 e
- 2 U- y+ w* i" O6 r. D. |
- }) _/ t/ A- [; n; @9 m9 a0 A
-
! k2 B; n F! L - if(tmpSearchPos[1]!=string::npos) {0 h% j$ g: _2 l9 `9 ~- D' X
- i=tmpSearchPos[1]+13;4 ?0 y+ \6 n E3 j7 R- m; A0 V
- / B& L' ^7 { M6 t; x! O
- while(processStr[i]!='\n' && processStr[i]!='\r') {
( A4 H( `" J+ f, H& { - cout << processStr[i];
. P: o, q. |7 r! q7 \! S - i++;; H ?$ g0 S( f2 t* H# ]6 Y
- }: |" @3 Q8 s' w- r
- 9 D# r: H. _/ I$ ?9 n" B
- cout << endl;
% H* B% V# C. \( O4 o9 C5 t - 9 l* q# p( I, @& [( m
- }
) D5 {- K: O4 V - : S8 Q0 N' p9 g f
- entriesCount++;
% f) u6 B6 x Z1 r& E - }
- m% F# f' \9 G8 |# ]+ _( i. x - 6 b% n; {; z/ G, S) r5 K
- cout<<entriesCount;1 h! ?1 L1 H! j
- return 0;: R) }9 e: j9 _' y
- ( s- |' n6 g) R0 \( e% w- }0 j
- }
复制代码 Update: 最后一行输出条目数., U1 I* Q, e9 [; g" m4 h. Q
' |2 d! m/ B3 v0 ~" u9 ~[ 本帖最后由 Euyis 于 2008-11-14 22:21 编辑 ] |
|