Advertisement
Guest User

parsing

a guest
Mar 25th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.79 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX_NUM_LINES 400
  5. #define MAX_STR_LEN 200
  6.  
  7. int readCDdata(char fileName[], char cvsMatrix[][MAX_STR_LEN])
  8. {
  9. int i, count;
  10. count = 0;
  11. FILE *fp;
  12. fp = fopen(fileName, "r");
  13. for(i = 0; i < 369; i++)
  14. {
  15. fgets(cvsMatrix[i], MAX_STR_LEN, fp);
  16. count++;
  17. }
  18. return (count);
  19. }
  20.  
  21. void stripNewLineAtEOS(char str[])
  22. {
  23. int n;
  24. n = strlen(str);
  25. if(str[n] == '\n') str[n] = '\0';
  26. }
  27.  
  28. int getCommaIndex(char str[], int index[])
  29. {
  30. int i, counter;
  31. i = 0;
  32. counter = 0;
  33. while(i < strlen(str))
  34. {
  35. if(str[i] == ',')
  36. {
  37. index[counter] = i;
  38. counter++;
  39. }
  40. i++;
  41. }
  42. return(counter);
  43. }
  44.  
  45. void getSubString(char str[], int i1, int i2, char substr[])
  46. {
  47. int i;
  48. i = 0;
  49. while (i1 < (i2 - 1))
  50. {
  51. substr[i] = str[i1];
  52. i1++;
  53. i++;
  54. }
  55. substr[i] = '\0';
  56. }
  57.  
  58. void parseCVS_String(char cvsStr[], char artist[], char title[], int year[], char genre[], float rating[], char fan[], int counter)
  59. {
  60. int commaindex[10000], numcommas, i, i1, i2;
  61. char substring[1000];
  62. numcommas = getCommaIndex(cvsStr, commaindex);
  63. for (i = 0; i <= numcommas; i++)
  64. {
  65. if(i == 0)i1 = 0;
  66. else i1 = commaindex[i-1] + 1;
  67. if (i == numcommas)i2 = strlen(cvsStr);
  68. else i2 = commaindex[i] + 1;
  69. getSubString(cvsStr, i1, i2, substring);
  70. if(i == 0) strcpy(artist, substring);
  71. if(i == 1) strcpy(title, substring);
  72. if(i == 2) year[counter] = atoi(substring);
  73. if(i == 3) strcpy(genre, substring);
  74. if(i == 4) rating[counter] = atof(substring);
  75. if(i == 5) strcpy(fan, substring);
  76. }
  77. }
  78.  
  79. void parseCVS_Matrix(int n, char cvsMatrix[][MAX_STR_LEN], char artist[][MAX_STR_LEN], char title[][MAX_STR_LEN], int year[], char genre[][MAX_STR_LEN], float rating[], char fan[][MAX_STR_LEN])
  80. {
  81. int i, j, counter;
  82. counter = 0;
  83. for (i = 0; i < n; i++)
  84. {
  85. parseCVS_String(cvsMatrix[i], artist[i], title[i], year, genre[i], rating, fan[i], counter);
  86. counter++;
  87. }
  88.  
  89. }
  90.  
  91. void printCD(int index, char cdDB_artist[][MAX_STR_LEN], char cdDB_title[][MAX_STR_LEN], int cdDB_year[], char cdDB_genre[][MAX_STR_LEN], float cdDB_rating[], char cdDB_fan[][MAX_STR_LEN])
  92. {
  93. printf("\n%s,%s,%d,%s,%f,%s", cdDB_artist[index], cdDB_title[index], cdDB_year[index], cdDB_genre[index], cdDB_rating[index], cdDB_fan[index]);
  94. }
  95.  
  96. void printCdList(int n, int index[], char cdDB_artist[][MAX_STR_LEN], char cdDB_title[][MAX_STR_LEN], int cdDB_year[], char cdDB_genre[][MAX_STR_LEN], float cdDB_rating[], char cdDB_fan[][MAX_STR_LEN])
  97. {
  98. int i, counter;
  99. for (i = 0; i < n; i++)
  100. {
  101. counter = index[i];
  102. printf("\n%s,%s,%d,%s,%f,%s", cdDB_artist[counter], cdDB_title[counter], cdDB_year[counter], cdDB_genre[counter], cdDB_rating[counter], cdDB_fan[counter]);
  103. }
  104. }
  105.  
  106. int queryByGenre(int n, char genre_of_interest[], int index[], char cdDB_genre[][MAX_STR_LEN])
  107. {
  108. int i, indexcounter;
  109. indexcounter = 0;
  110. for(i = 0; i < n; i++)
  111. {
  112. if(strcmp(genre_of_interest, cdDB_genre[i]))
  113. {
  114. index[indexcounter] = i;
  115. indexcounter++;
  116. }
  117. }
  118. return (indexcounter);
  119. }
  120.  
  121. int queryByArtist(int n, char artist_of_interest[], int index[], char cdDB_artist[][MAX_STR_LEN])
  122. {
  123. int i, indexcounter;
  124. indexcounter = 0;
  125. for(i = 0; i < n; i++)
  126. {
  127. if(strcmp(artist_of_interest, cdDB_artist[i]) == 0)
  128. {
  129. index[indexcounter] = i;
  130. indexcounter++;
  131. }
  132. }
  133. return (indexcounter);
  134. }
  135.  
  136. int queryByTitle(int n, char title_of_interest[], int index[], char cdDB_title[][MAX_STR_LEN])
  137. {
  138. int i, indexcounter;
  139. indexcounter = 0;
  140. for (i = 0; i < n; i++)
  141. {
  142. if(strcmp(title_of_interest,cdDB_title[i]) == 0)
  143. {
  144. index[indexcounter] = i;
  145. indexcounter++;
  146. }
  147. }
  148. return (indexcounter);
  149. }
  150.  
  151. int queryByYear(int n, int minYear, int maxYear, int index[], int cdDB_year[])
  152. {
  153. int i, indexcounter;
  154. indexcounter = 0;
  155. for (i = 0; i < n; i++)
  156. {
  157. if(cdDB_year[i] >= minYear && cdDB_year[i] <= maxYear)
  158. {
  159. index[indexcounter] = i;
  160. indexcounter++;
  161. }
  162. }
  163. return (indexcounter);
  164. }
  165.  
  166.  
  167. int queryByRating(int n, float minRating, float maxRating, int index[], float cdDB_rating[])
  168. {
  169. int i, indexcounter;
  170. indexcounter = 0;
  171. for (i = 0; i < n; i++)
  172. {
  173. if(cdDB_rating[i] >= minRating && cdDB_rating[i] <= maxRating)
  174. {
  175. index[indexcounter] = i;
  176. indexcounter++;
  177. }
  178. }
  179. return (indexcounter);
  180. }
  181.  
  182. int queryByFan(int n, char fan_of_interest[], int index[], char cdDB_fan[][MAX_STR_LEN])
  183. {
  184. int i, indexcounter;
  185. indexcounter = 0;
  186. for (i = 0; i < n; i++)
  187. {
  188. if(strcmp(fan_of_interest, cdDB_fan[i]) == 0)
  189. {
  190. index[indexcounter] = i;
  191. indexcounter++;
  192. }
  193. }
  194. return (indexcounter);
  195. }
  196.  
  197.  
  198. int main()
  199. {
  200. char searchnum[2];
  201. int searchindexs[500], count, minYear, maxYear;
  202. float minRating, maxRating;
  203. char searchstr[50];
  204. char artist[MAX_NUM_LINES][MAX_STR_LEN];
  205. char title[MAX_NUM_LINES][MAX_STR_LEN];
  206. int year[MAX_NUM_LINES];
  207. char genre[MAX_NUM_LINES][MAX_STR_LEN];
  208. float rating[MAX_NUM_LINES];
  209. char fan[MAX_NUM_LINES][MAX_STR_LEN];
  210. int index[500], counter;
  211. char fileName[] = "Parsing.txt";
  212. char csvMatrix [MAX_NUM_LINES][MAX_STR_LEN];
  213. int numberoflines, i;
  214. numberoflines = readCDdata(fileName, csvMatrix);
  215. for(i = 0; i < numberoflines; i++)
  216. {
  217. stripNewLineAtEOS(csvMatrix[i]);
  218. }
  219. parseCVS_Matrix(numberoflines, csvMatrix, artist, title, year, genre, rating, fan);
  220. printf("\n1. Artist.");
  221. printf("\n2. Title.");
  222. printf("\n3. Year.");
  223. printf("\n4. Genre.");
  224. printf("\n5. Rating.");
  225. printf("\n6. Fan.");
  226. printf("\nEnter a number corresponding to the search you wish to perform: ");
  227. fgets(searchnum, 2, stdin);
  228. if (searchnum[0] == '1')
  229. {
  230. printf("\nEnter the name of the Artist you wish to search: ");
  231. scanf("%s", &searchstr);
  232. count = queryByArtist(numberoflines, searchstr, searchindexs, artist);
  233. printf("\n%-3d Results.", count);
  234. for (i = 0; i < count; i++)
  235. {
  236. printCD(searchindexs[i], artist, title, year, genre, rating, fan);
  237. }
  238. }
  239. if (searchnum[0] == '2')
  240. {
  241. printf("\nEnter the title you wish to search: ");
  242. scanf("%s", &searchstr);
  243. count = queryByTitle(numberoflines, searchstr, searchindexs, title);
  244. printf("\n%-3d Results.", count);
  245. for (i = 0; i < count; i++)
  246. {
  247. printCD(searchindexs[i], artist, title, year, genre, rating, fan);
  248. }
  249. }
  250. if (searchnum[0] == '3')
  251. {
  252. printf("\nEnter the earliest year you wish to search for: ");
  253. scanf("%d", &minYear);
  254. printf("\nEnter the later year you wish to search for: ");
  255. scanf("%d", &maxYear);
  256. count = queryByYear(numberoflines, minYear, maxYear, searchindexs, year);
  257. printf("\n%-3d Results.", count);
  258. for (i = 0; i < count; i++)
  259. {
  260. printCD(searchindexs[i], artist, title, year, genre, rating, fan);
  261. }
  262. }
  263. if (searchnum[0] == '4')
  264. {
  265. printf("\nEnter the genre you wish to search: ");
  266. scanf("%s", &searchstr);
  267. count = queryByGenre(numberoflines, searchstr, searchindexs, genre);
  268. printf("\n%-3d Results.", count);
  269. for (i = 0; i < count; i++)
  270. {
  271. printCD(searchindexs[i], artist, title, year, genre, rating, fan);
  272. }
  273. }
  274. if (searchnum[0] == '5')
  275. {
  276. printf("\nEnter the lowest rating you wish to search for: ");
  277. scanf("%f", &minRating);
  278. printf("\nEnter the highest rating you wish to search for: ");
  279. scanf("%f", &maxRating);
  280. count = queryByRating(numberoflines, minRating, maxRating, searchindexs, rating);
  281. printf("\n%-3d Results.", count);
  282. for (i = 0; i < count; i++)
  283. {
  284. printCD(searchindexs[i], artist, title, year, genre, rating, fan);
  285. }
  286. }
  287. if (searchnum[0] == '6')
  288. {
  289. printf("\nEnter the fan you wish to search: ");
  290. scanf("%s", searchstr);
  291. count = queryByFan(numberoflines, searchstr, searchindexs, fan);
  292. printf("\n%-3d Results.", count);
  293. for (i = 0; i < count; i++)
  294. {
  295. printCD(searchindexs[i], artist, title, year, genre, rating, fan);
  296. }
  297.  
  298. }
  299. return 0;
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement