- UID
- 1023
- UCC
-
- 声望
-
- 好评
-
- 贡献
-
- 最后登录
- 1970-1-1
|
- // Nov 14, 2008 - by Euyis0 F8 } s4 l5 U, W, e1 y" \. N
- / Y! A. M+ U& k, l+ o3 j
- //4 C. x* y& c# L+ q* `" O
- // I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.
7 ?* F' O% y- K2 h - // In case this is not legally possible,! T' r; |/ f; |- r3 t& @ x6 J
- // I grant any entity the right to use this work for any purpose, without any conditions, unless such conditions are required by law.; x+ \0 d+ Z( v4 j7 M# x
- //( X5 {: E/ n. F4 T& k
- ) F" I/ n0 i4 _: a- y- B+ s3 {
- #include <iostream>' s% x1 j" D) O
- #include <fstream>
7 k% _+ g' f) b# K- y, W - #include <cctype>
7 r6 t9 B2 Z& G& e! s - using namespace std;
1 C/ X6 f' @+ T% X$ p2 b
/ n% o3 z& S5 r4 \4 M3 K+ e- // MACROS
! x m% r( b4 W - #define SYSTEM_BLOCK_STR "[system]"& [, l/ r# y! {. o3 Z5 x
- #define NICKNAME_STR "nickname = "2 Z7 V; ~. O' Z* ~
- #define IDS_STR "strid_name = "
6 r: w. C! e# }7 r# r' b* B# a - //: p) e; r) V2 Q O5 a# p
- ; ?+ y5 m- `* u( p8 T
- ifstream inf;
5 ?: U. y& s* E8 l' @0 y2 p U - char *buffer;
$ m/ D- a* w1 ] q" ~ - : n# v2 i( q6 J3 r: M/ m
- int main(int argc, char *argv[]) k2 I3 F) X! E- c
- {
' j' i8 P& Q( q" ]* W - int i;
$ G( |1 f6 i8 }& X - 2 m+ R3 S7 ?- q3 h
- if(argc!=2){ 5 X* b6 J8 U2 U2 q" a
- cout << "This program requires one and only one argument.";7 `2 k/ ~; y' m- A
- return -1;
: m/ c1 e0 h) W- _9 ~3 S- p; b - }- N# }0 N" B8 ]' ]
- * n @$ l4 E( L% Y4 ~5 L C. x
- inf.open(argv[1], ios_base::in | ios_base::ate);
- b; F) G. j8 J1 n( f - if(!inf) {
: @ d7 d( }; D c$ B - cout << "Error opening file.";
! d4 q7 F+ J! T# e4 p4 ^7 i0 d - return -1;( y2 f& I: g$ I7 j: _
- }
6 Q/ [8 x, T# Z8 x- b - # m. U0 h+ j7 A- F8 I. k
- int streamLength = inf.tellg();2 Z, D' r2 j3 {# ~% F, O" e
- if(streamLength!=-1) {
* J) L% d7 f9 Y( _' Q) X! n) ^ - inf.seekg(0, ios::beg);
$ f0 n `9 u: x" h4 N9 h -
! j+ c4 }) d2 Z9 @1 d - buffer = new char [streamLength];4 r2 Y- S: j$ U
- // Read file;
$ M% L+ j! L1 M& O! x: K, m - for(i=0;i<streamLength;i++) {# U, V) c7 ~0 ~. l5 {! c2 {
- inf.get(buffer[i]);
' v: U/ d h6 p, b0 |4 a - buffer[i] = tolower(buffer[i]);6 O" B/ Q6 J; I! {- f& ~2 Y4 s$ J
- }0 y! R! e, w# u) K( ~* p c
-
/ e) [, Y" n- G - /* For testing2 A( t7 Z% w+ f) V$ w: h) K/ L, n! p
- for(i=0;i<streamLength;i++) {
& W) s& |, p7 s1 u! |5 c - cout << buffer[i];
* \7 {4 J* v1 r- {! ?9 G. r' X - }& N, l* w4 o" e- D* ^
- */3 r, X) ~% z& `" i
- }
: J9 L* F3 l5 J - else {
+ Q+ N0 G4 B+ I% v& {2 n$ g. D - cout << "Failed to read file." << endl;
L' M& F' o+ f( A - return -1;
* T0 r2 Q. Z0 A+ G# W! ~ - }4 D3 ~) L3 q. M+ b0 [
- ' f, t- [" r2 V, D
- string processStr (buffer);5 i8 \$ d) P: a- ?2 [1 ?- p6 n" t
- delete [] buffer;
# B; c7 b& K$ V- R$ V* ^% r- | - , B0 G4 L3 y( F6 ^
- // DUMB DUMB DUMB....
! g( d0 N8 c) T1 N @/ g - - a/ P# [" ~' m: R. ]- p6 z& z/ y; f+ N
- int nextSearchPos = 0;
& K' E$ E0 l$ o# s - int tmpSearchPos[2] = {0};. Y" u) i0 T: W+ |: L
- int entriesCount = 0;2 |. k1 \7 j5 `3 a* [( g
-
6 Y0 N( O2 z% ]: ? -
/ A. p8 Q! s/ N0 N -
- M. F$ m6 O& S+ @. Y - while(processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)!=string::npos) {4 Q- c, n- N, O$ a# D
- nextSearchPos = processStr.find(SYSTEM_BLOCK_STR, nextSearchPos)+8;: u* R! o5 J4 H) r9 Y/ Q- l! T
- tmpSearchPos[0] = processStr.find(NICKNAME_STR, nextSearchPos);
( F0 ~$ K; a) z3 F. j - tmpSearchPos[1] = processStr.find(IDS_STR, nextSearchPos);
7 U* T1 E; |+ q3 Y# k4 w - : p; I7 }; q/ p& R
- if(tmpSearchPos[0]!=string::npos) {9 b) ? ~# r* g4 y1 @0 G
- i=tmpSearchPos[0]+11;! T) y- e& Z$ B# Z) X" S$ Z/ P
-
- [" u8 U2 d! X8 O$ @: D$ @6 h - while(processStr[i]!='\n' && processStr[i]!='\r') {
' U# i8 v0 ~& ~9 N2 L' Q - cout << processStr[i];
, u) l: v S5 L1 B' W" ] - i++;
( o3 N/ t6 Z* e - }1 l# X, r; F5 O1 W
-
( Z7 @2 S; I0 ] R - cout << endl;3 `; R- j2 h2 Q! m4 y9 h
-
& |& C" `1 ?8 z) p* [; i! H/ C - }) c" }7 f' l$ u9 p
-
8 y6 M& W% x* v- V) s- A - if(tmpSearchPos[1]!=string::npos) {. K9 {+ D3 m4 Z0 w% C
- i=tmpSearchPos[1]+13;! S* Q# @' q! S/ i; o3 H; g
-
! m* ]0 F$ q; K1 M: _ - while(processStr[i]!='\n' && processStr[i]!='\r') {. n: T* ~; D: n2 G" Y, {
- cout << processStr[i];
' h; J/ x# A5 y# u& E - i++;$ i+ d ~( z2 n4 S, t5 E# q/ f
- }7 Q' a# i4 S% g; R- H: [; H2 r* P' `
- ; W8 n% C6 {8 l6 `% U4 u: z
- cout << endl;
# L6 S7 _% m0 l5 Y& o: [% h: N1 M - ! \- f* p4 f( O5 T6 z0 U8 [# ~
- }
/ ~1 ?( j6 I$ N) |1 w -
- |8 E7 ~5 T/ Q, ` - entriesCount++;5 i7 [1 \+ T1 \" l$ r
- }
% ^! @2 u. i! I9 P -
: y7 X' ]. d( A! e/ ^8 D - cout<<entriesCount;
0 G' y, u) A4 f3 }$ ?5 ~ - return 0;, A0 C6 q- M( Y9 u4 j# M! h
-
Y& _. K2 x2 z: W7 l, H: K$ O - }
复制代码 Update: 最后一行输出条目数.
! R# I! h4 [% z! s- B+ m
* N2 c' S& S2 L- |[ 本帖最后由 Euyis 于 2008-11-14 22:21 编辑 ] |
|