- UID
- 1023
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
- // Nov 14, 2008 - by Euyis
! R: z+ C% e& O6 i' t0 D3 } - . f, [/ g, M) ?+ e+ ]+ ?
- //8 C/ J6 m! _. i5 h+ y- r( m
- // I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.
6 c9 l+ b( Z e. m - // In case this is not legally possible,
7 @/ J, ~& [7 X: N, y - // I grant any entity the right to use this work for any purpose, without any conditions, unless such conditions are required by law.
* v" v2 P, G( t& _" c - //
' Y$ n( Y* z9 d4 ]& |& X5 c
m9 z5 }& v# x* f% Z" p$ n- k. ?- #include <iostream>: m: u! e) ~: O3 v
- #include <fstream>
& Q' y8 e1 J/ m" i* `. _, @) w* {+ i; B$ ] - #include <cctype>$ ]0 F+ |) h' v: d: O0 l, C; n
- using namespace std;. I! `8 s3 ?" [
9 B4 V! L, D6 u, S/ E1 s$ e6 j, _- // MACROS1 Q9 L5 O0 O5 J. N. F6 z
- #define SYSTEM_BLOCK_STR "[system]"
e- N+ [0 b) A - #define NICKNAME_STR "nickname = "9 R% k) j2 [6 K5 }/ M% U( z
- #define IDS_STR "strid_name = "1 T2 l7 q% P% r' U4 l, {
- //% h0 U0 V' S; S0 m
- . b1 Y5 O- b9 e2 G
- ifstream inf;
# Z3 l* H' s7 F - char *buffer;* I, f4 z! D" f; R
- ( C6 E T% U4 k z- Y/ S
- int main(int argc, char *argv[])
. ~! n! y" a, u# F$ f: P - {
! G+ I$ K G7 R' v+ j2 w D - int i;) P3 G9 ?0 ]! z5 }5 E0 H0 ]
-
. y8 C4 h0 L! b1 y) ^7 R+ q+ m - if(argc!=2){
S6 v. Q( p) a1 K( F - cout << "This program requires one and only one argument.";6 T+ H B. s$ r3 [0 f" o+ Y* \
- return -1;0 R7 }1 T% P& {! ^
- } r, r/ n6 O+ V# e2 x& r
-
/ C h& s8 I/ K, c" G0 v" D - inf.open(argv[1], ios_base::in | ios_base::ate);% s$ W0 s3 s, u
- if(!inf) {
! g; ~3 P- o# j - cout << "Error opening file.";
, d N" z, V) R5 u+ L - return -1;
: |& X4 N7 S. U3 ^1 D# P; ^ - }
8 K" ?! e4 Q8 t6 p - : B1 q0 }; Y7 S+ k/ x9 A' c* O, a0 j
- int streamLength = inf.tellg();
2 i" j2 B" A- E0 ]$ z - if(streamLength!=-1) {# z9 [/ |4 E E4 a+ v R$ @& {
- inf.seekg(0, ios::beg);% ]% y, `4 e5 P
- 2 M# Y% f/ } H
- buffer = new char [streamLength];
2 @2 P* P* ~, i+ y - // Read file;
! y8 P: C$ @8 B! D, \ - for(i=0;i<streamLength;i++) {
+ P! C! z; U" w4 v+ z& d: P - inf.get(buffer[i]);
! x. A- a5 a. E5 W4 T, a - buffer[i] = tolower(buffer[i]);3 [# X5 y2 A: V1 O) x% M! |
- }6 m% p, c6 N8 |
- / B6 I5 F. j6 U9 }/ X4 |/ v
- /* For testing
6 l7 V4 d, c& K' O- c - for(i=0;i<streamLength;i++) {" B; s8 d8 L8 `+ [9 e! k
- cout << buffer[i];$ ^# f: @1 L* _& p B! R1 \
- }
* W$ h1 v' z. ]9 Q& M - */ J4 G1 G4 f/ e
- }1 O2 J0 C, t) |$ m( k) ?$ c" M
- else {
' i: \. U4 r0 ^. H$ z/ B! f+ e% f - cout << "Failed to read file." << endl;0 X7 T3 N9 ?. k- S `
- return -1;' J' A l: A% C5 i
- }
; v9 c, B) c- K' z0 [. F! a -
$ @3 W- L8 ~" e" H! O - string processStr (buffer);+ f' x7 o m! W, E: M
- delete [] buffer;
# L- e+ @! U/ r: q! K - $ f4 }6 j+ J; m1 k
- // DUMB DUMB DUMB....
3 L* V% U, `4 b8 z -
4 |! F$ v1 j! W8 v7 Y' u - int nextSearchPos = 0;) S T1 n0 r( A: C; E, ]
- int tmpSearchPos[2] = {0};5 b3 d; I' T5 \/ K% b1 @0 B2 J
- int entriesCount = 0;# n2 X; q. ^& }) b( i- \
- 9 b/ |! y% S j$ @* c7 k
- + i, n, _$ } D# Z# S
-
) b" }( ]0 Z2 e2 z) ] - while(processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)!=string::npos) {. z8 N8 y" r5 q4 ^3 I. Z) k# n
- nextSearchPos = processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)+8;
( y- |& C a' R - tmpSearchPos[0] = processStr.find(NICKNAME_STR, nextSearchPos);
; Q% N, Y) D( q* B - tmpSearchPos[1] = processStr.find(IDS_STR, nextSearchPos);' m" v1 w. T9 Q/ G0 _6 p" @
-
( X2 E$ z4 F3 y - if(tmpSearchPos[0]!=string::npos) {
5 s: z& L; [" e9 B! h - i=tmpSearchPos[0]+11;+ h% p" y! h- K0 s
- i/ Y! Z! H5 Q: y+ \
- while(processStr[i]!='\n' && processStr[i]!='\r') {8 s; \% r" V9 F; T$ v5 S8 @8 X T
- cout << processStr[i];
- I6 X* m' g# S' \) j: m( z - i++;
8 Q& ^0 j# E) k - }. h+ c _+ @8 R5 O: o! e
- 3 ?4 A: {- X- D* W
- cout << endl;% V# W) A5 ?2 W S( g* ]- [: _: u
-
" x) ^; ?, X1 B - }
1 k1 E6 [; ^5 T- i - 3 r$ x: @" V5 p B! a, ]" L
- if(tmpSearchPos[1]!=string::npos) { J0 V% P% r8 s# {
- i=tmpSearchPos[1]+13;
. K. p, u: w4 @" G6 W3 z" ~ -
& n8 i) h$ `& Y - while(processStr[i]!='\n' && processStr[i]!='\r') {
6 \( y4 o. X( H4 x - cout << processStr[i];. C8 f. P- M# d! c3 L
- i++;
T! q( u7 g9 G2 V: m, a - }! [" l6 k M) J% q8 b: y! k9 ]. }
- T' h* T) D) J/ ?( {+ j6 f5 J
- cout << endl;7 |1 G5 O9 ^3 t# j) e- F
- & w( h: U* l$ _$ r
- }
5 H: B9 F7 Y' q% ^' d - ; q# D9 |1 i# Z4 g
- entriesCount++;% X; j Z1 m3 E+ @4 [6 n$ g
- }" d% P/ f: x' N9 I" Y& }$ {
-
4 |$ C' E% P* S! b - cout<<entriesCount;. @* e( \: O; X" Y M' O* Q
- return 0;
+ m4 X6 C h% { -
5 J7 u6 I. ^% Y' _7 v! _/ q - }
复制代码 Update: 最后一行输出条目数.9 d: ]) t* `5 f& g+ Z. d* I0 m
3 V. }7 q- i% P+ O; |& z; s[ 本帖最后由 Euyis 于 2008-11-14 22:21 编辑 ] |
|