CSTRUTIL.CPP
上传用户:shengde
上传日期:2007-02-26
资源大小:117k
文件大小:7k
源码类别:

Ftp服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "cstrutil.h"
  3. SECFileSystem csrutilfs;
  4. bool quickInited = false;
  5. int length = 0;
  6. int length1 = 0;
  7. int poz[32];
  8. int ind = 0;
  9. BOOL NormalizeSentence(char *str)
  10. {
  11. int linelength = strlen(str);
  12. return TRUE;
  13. }
  14. BOOL WORDINFILE2CSL(char finame[255],CStringList* CSL)
  15. {
  16. char *buf;
  17. int stoffset = 0;
  18. int edoffset = 0;
  19. BOOL newword = FALSE;
  20. BOOL st = FALSE;
  21. BOOL ed = FALSE;
  22. WIN32_FIND_DATA MyFoundFile1;
  23. HANDLE Hfound1 = FindFirstFile(finame,&MyFoundFile1);
  24. long iSize = MyFoundFile1.nFileSizeLow;
  25. buf = (char*)malloc(iSize);
  26. CFile ifs((LPCTSTR) finame , CFile::modeRead);
  27. ifs.Read(buf,iSize);
  28. FindClose(Hfound1);
  29. removenontext(buf,iSize);
  30. for(long i=0;i<iSize;i++)
  31. {
  32. if(*(buf+i) != ' ' && st == FALSE && ed == FALSE)
  33. {
  34. stoffset = i;
  35. st = TRUE;
  36. }else if(*(buf+i) == ' ' && st == TRUE && ed == FALSE)
  37. {
  38. edoffset = i;
  39. ed = TRUE;
  40. }
  41. if(st == TRUE && ed == TRUE)
  42. {
  43. volatile char wrd[64];
  44. strncpy((char*)wrd,buf+stoffset,(edoffset-stoffset));
  45. *(wrd+edoffset-stoffset) = NULL;
  46. CString newitm = (char*)wrd;
  47. if(newitm=="");
  48. else
  49. {
  50. POSITION pos1,pos2;
  51. if( ( pos1 = CSL->GetHeadPosition() ) != NULL )
  52. pos2 = CSL->InsertAfter( pos1, newitm );  
  53. else
  54. CSL->AddHead(newitm);
  55. }
  56. st = FALSE;
  57. ed = FALSE;
  58. }
  59. }
  60. return TRUE;
  61. }
  62. BOOL removenontext(char* str,long size)
  63. {
  64. for(int i=0;i<size;i++)
  65. {
  66. if((str[i]==''')||(str[i]<=32)||(str[i]==34)||(str[i]==42)||(str[i]==47)||(str[i]>=58&&str[i]<=64)||(str[i]>=91&&str[i]<=96)||(str[i]>=58&&str[i]<=64)||str[i]>=123||str[i]=='\'||str[i]=='-'||str[i]=='$'||str[i]=='%')
  67. str[i]=' ';
  68. }
  69. return TRUE;
  70. }
  71. void FILE2CSLNLIST(char* finame,CStringList* CSL,LPVOID plist)
  72. {
  73. if(csrutilfs.FileExists(finame))
  74. {
  75. char buf[512] = "";
  76. CStdioFile ifs((LPCTSTR) finame , CFile::modeRead  | CFile::shareDenyNone);
  77. if(ifs.ReadString(buf,512) != NULL)
  78. {
  79. do
  80. {
  81. int l = strlen(buf) - 1;
  82. if(l >= 0)
  83. {
  84. if(*(buf+l) == 'n')
  85. *(buf+l) = NULL;
  86. }
  87. CString newitm = buf;
  88. if(newitm=="");
  89. else
  90. {
  91. POSITION pos1,pos2;
  92. if( ( pos1 = CSL->Find(newitm, NULL ) )!= NULL );    
  93. else if( ( pos1 = CSL->GetHeadPosition() ) != NULL )    
  94. {
  95. pos2 = CSL->InsertAfter( pos1, newitm );  
  96. ((CListBox*)plist)->AddString((LPCSTR)newitm);
  97. }else
  98. {
  99. CSL->AddHead(newitm);
  100. ((CListBox*)plist)->AddString((LPCSTR)newitm);
  101. }
  102. }
  103. }while(ifs.ReadString(buf,512) != NULL);
  104. }
  105. ifs.Close();
  106. }
  107. }
  108. void FILE2CSL(char* finame,CStringList* CSL)
  109. {
  110. if(csrutilfs.FileExists(finame))
  111. {
  112. char buf[512] = "";
  113. CStdioFile ifs((LPCTSTR) finame , CFile::modeRead | CFile::shareDenyNone);
  114. if(ifs.ReadString(buf,512) != NULL)
  115. {
  116. do
  117. {
  118. int l = strlen(buf) - 1;
  119. if(l >= 0)
  120. {
  121. if(*(buf+l) == 'n')
  122. *(buf+l) = NULL;
  123. }
  124. CString newitm = buf;
  125. if(newitm=="");
  126. else
  127. {
  128. POSITION pos1,pos2;
  129. if( ( pos1 = CSL->Find(newitm, NULL ) )!= NULL );    
  130. else if( ( pos1 = CSL->GetHeadPosition() ) != NULL )    
  131. pos2 = CSL->InsertAfter( pos1, newitm );  
  132. else
  133. CSL->AddHead(newitm);
  134. }
  135. }while(ifs.ReadString(buf,512) != NULL);
  136. }
  137. ifs.Close();
  138. }
  139. }
  140. void CSL2LIST(CStringList* CSL,LPVOID plist)
  141. {
  142. CString Citem;
  143. POSITION pos;
  144. for(pos = CSL->GetHeadPosition(); pos != NULL; )    
  145. {
  146. Citem = CSL->GetNext( pos );
  147. ((CListBox*)plist)->AddString((LPCSTR)Citem);
  148. }
  149. }
  150. void CSL2FILE(CStringList* CSL,char* finame)
  151. {
  152. CStdioFile ofs((LPCTSTR) finame ,CFile::modeWrite|CFile::modeCreate);
  153. POSITION pos;
  154. CString save;
  155. for( pos = CSL->GetHeadPosition(); pos != NULL; )   
  156. {
  157. save = CSL->GetNext( pos );
  158. ofs.WriteString((LPCTSTR)save);
  159. ofs.WriteString("n");
  160. }
  161. ofs.Close();
  162. }
  163. void LIST2CSL(LPVOID plist,CStringList* CSL)
  164. {
  165. // POSITION pos;
  166. CString save;
  167. int count = ((CListBox*)plist)->GetCount();
  168. for(int i=0;i<count;i++)   
  169. {
  170. CString CiTEM;
  171. ((CListBox*)plist)->GetText(i,(char*)(LPCSTR)CiTEM);
  172. POSITION pos1,pos2;
  173. if((pos1 = CSL->Find(CiTEM, NULL)) != NULL );    
  174. else if((pos1 = CSL->GetHeadPosition()) == NULL )    
  175. CSL->AddHead(CiTEM);
  176. else
  177. pos2 = CSL->InsertAfter( pos1, CiTEM );   
  178. }
  179. }
  180. BOOL GETITEMFROMCS(int index,CString* CSTARGET,CString* CSITEM,char sep)
  181. {
  182. int length = CSTARGET->GetLength();
  183. int length1 = length - 1;
  184. int poz[32];
  185. int ind = 0;
  186. for(int i=0 ; i<length ; i++)
  187. {
  188. if(CSTARGET->GetAt(i) == sep || ( (i==length1)&&(ind==0) ))
  189. {
  190. if((i==length-1)&&(ind==0))
  191. poz[ind] = i+1;
  192. else
  193. poz[ind] = i;
  194. ind ++;
  195. }
  196. if(ind == index + 1)
  197. i=length;
  198. }
  199. if(index == 0)
  200. {
  201. *CSITEM = CSTARGET->Mid(0,poz[0]);
  202. return TRUE;
  203. }else if(index > 0 && index <ind)
  204. {
  205. *CSITEM = CSTARGET->Mid(poz[index-1]+1,poz[index]-poz[index-1]-1);
  206. return TRUE;
  207. }else if(index == ind)
  208. {
  209. *CSITEM = CSTARGET->Mid(poz[index-1]+1,length-poz[index-1]-1);
  210. return TRUE;
  211. }
  212. return FALSE;
  213. }
  214. BOOL GETITEMSFROMCS(CString* CSTARGET,CStringList* CSITEM,char sep)
  215. {
  216. int length = CSTARGET->GetLength();
  217. int poz[256];
  218. int ind = 0;
  219. POSITION pos;
  220. for(int i=0 ; i<length ; i++)
  221. {
  222. if(*((LPCSTR)*CSTARGET+i) == sep)
  223. {
  224. poz[ind] = i;
  225. ind ++;
  226. }
  227. }
  228. for(int index = 0;index <= ind ; index++)
  229. {
  230. if(index == 0)
  231. {
  232. if(ind == 0)
  233. pos = CSITEM->AddHead(CSTARGET->Mid(0,length));
  234. else
  235. pos = CSITEM->AddHead(CSTARGET->Mid(0,poz[0]));
  236. }
  237. else if(index > 0 && index <ind)
  238. pos = CSITEM->InsertAfter(pos,CSTARGET->Mid(poz[index-1]+1,poz[index]-poz[index-1]-1));
  239. else if(index == ind)
  240. pos = CSITEM->InsertAfter(pos,CSTARGET->Mid(poz[index-1]+1,length-poz[index-1]-1));
  241. }
  242. return TRUE;
  243. }
  244. BOOL quickGETITEMFROMCS(int index,CString* CSTARGET,CString* CSITEM,char sep)
  245. {
  246. if(index == 0)
  247. {
  248. quickInited = true;
  249. length = CSTARGET->GetLength();
  250. length1 = length - 1;
  251. ind = 0;
  252. for(int i=0 ; i<length ; i++)
  253. {
  254. if(CSTARGET->GetAt(i) == sep || ( (i==length1)&&(ind==0) ))
  255. {
  256. if((i==length-1)&&(ind==0))
  257. poz[ind] = i+1;
  258. else
  259. poz[ind] = i;
  260. ind ++;
  261. }
  262. }
  263. }
  264. if(index == 0)
  265. {
  266. *CSITEM = CSTARGET->Mid(0,poz[0]);
  267. return TRUE;
  268. }else if(index > 0 && index <ind)
  269. {
  270. *CSITEM = CSTARGET->Mid(poz[index-1]+1,poz[index]-poz[index-1]-1);
  271. return TRUE;
  272. }else if(index == ind)
  273. {
  274. quickInited = false;
  275. *CSITEM = CSTARGET->Mid(poz[index-1]+1,length-poz[index-1]-1);
  276. return TRUE;
  277. }
  278. return FALSE;
  279. }
  280. BOOL wideGETITEMFROMCS(int index,char* source,char* dest,char* sep)
  281. {
  282. int len = strlen(source);
  283. int laststart = 0;
  284. int start = 0;
  285. int end = 0;
  286. int sepcnt = 0;
  287. bool found = false;
  288. bool eol = false;
  289. for(int i=0;i<len;i++)
  290. {
  291. if((*(source+i) == *(sep) && *(source+i+1) == *(sep+1)))
  292. {
  293. if(index == sepcnt)
  294. {
  295. start = laststart;
  296. end = i-1;
  297. i = len;
  298. found = true;
  299. }
  300. else
  301. {
  302. laststart = i+2;
  303. sepcnt++;
  304. }
  305. }
  306. else if(i == len-1)
  307. {
  308. start = laststart;
  309. end = i;
  310. found = true;
  311. eol= true;
  312. }
  313. }
  314. if(found)
  315. {
  316. strncpy(dest,source+start,end-start+1);
  317. if(eol)
  318. return false;
  319. return true;
  320. }else
  321. return false;
  322. }