Re: [討論] 修改CSV格式 請問這樣值多少錢?

看板CodeJob作者 (800IM)時間12年前 (2011/12/02 18:43), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串10/12 (看更多)
感謝板上各方高手出來獻計,又讓小弟我回去重新檢視 code 發現嚴重 Bug! 假設有效資料 6000 筆,若 user 輸入 5000 筆,會回過頭把前 1000 筆資料蓋 掉!幸好發現得早,不然就吃了人家的飯,又耽誤人家畢業時程了!   很高興無心上來問個小問題,就能引出這麼多高手互相切磋。雖然我只得懂 C++ 和 VB6,不過其他的語言我還是嘗試去解讀,竟然看到有一行就能完成的實 在太強...@@   不過看到 reader 說的 "要把 user 當笨蛋,寫一個好的小程式" 我就有感 而發。為了要寫得防呆、防錯、快速 (考慮哪裡要 break 或 inline , 或是怎麼 減少 loop 又不會出錯) 花的時間,遠大於寫到有最低功能的時間。尤其這個版 很多靠程式過生活,不像我只是賣賣人情,怎麼寫的細緻就很重要,但是在業主 costdown 的風氣下,各位會不會懷疑,自己需不需要這麼用心呢?   因我們只修 3 學分程式設計,不像資工資管學了一大堆,計結、資結、演算 法都是程式設計「順便講一下」而已,命名原則、防錯、加速的觀念老師上課會提 ,但是不要求。不諱言的說,自己寫到滿足功能就花了三小時,後面又花了好幾倍 的時間改良和除錯,而且還沒除完...@@,看來我若要上戰場,真的還得多修幾門 資工的課。 我也來貼一下修改後的 code 好了: (縮排都是一個 Tab,請問po上來的時候要怎麼修改才不會太長呢?) #include <stdio.h> #include <iostream> #include <stdlib.h> #include <ctype.h> using namespace std; #define Number 200000 //有效資料筆數上限,可修改 #define Word 6 //每次讀入資料字元上限,可修改 FILE *cfPtr; char strWord[Word]; //暫存讀入的一筆資料 int nCounter=0; // 資料筆數計數器 int nNonDig=0; // "非半形數字"計數器 double daArr[Number]; //剔除"非半形數字"後,儲存在此 int main(void) { while(1) //選單系統 { cout << " 這是OOO專用客製化程式,其他人用也要請我吃雞排XD by OOO \n\n" ; cout << " 1.清除 \"input.txt\" 中所有的非半形數字字元,需與本.exe放同資料夾 \n"; cout << " 2.把每組數字呈直行排列\n"; cout << " 3.最多讀入 20 萬組數據\n"; cout << " 4.每組數據不可超過六字元(中文3字元)\n"; cout << " 5.目前只接受整數,還無法接受浮點數\n"; cout << " 6.會輸出 \"修改完成.txt\" \n\n"; break; } if( (cfPtr = fopen("input.txt","r")) == NULL) cout << " 找不到檔案"; else { while(!feof(cfPtr)) { fscanf(cfPtr,"%s",&strWord); //讀一筆資料,以ASCII儲存 for(int i=0;i<Word;i++) //開始檢查此筆數據中,是否有非數字 if((strWord[i]<48 || 57<strWord[i])&&(strWord[i]!='\0')/*&&(strWord[i]!=46)*/) // 判斷,字串strWord 中是否有不屬於數字的ASCII { nNonDig++; //有非數字就在nNonDig紀錄 break; } if(nNonDig==0) { daArr[nCounter] = atoi(strWord); //atoi()可把ASCII轉回 nCounter++; } else if(nNonDig!=0) nNonDig=0; //歸零,否則後面每個loop每筆都變非數字 } fclose(cfPtr); } //讀取完成 if(nCounter!=0)/* 開始寫入檔案 */ { cfPtr = fopen("修改完成.txt","w"); cout << "有效資料共 " << nCounter << " 筆!" << endl; for(int i=0;i<nCounter;i++) fprintf(cfPtr,"%.0lf\n",daArr[i]); //把陣列daArr[i]每個元素逐行印出,去除小 數(反正都是0) } fclose(cfPtr); cout << "\n\a "; system("pause"); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.52.205

12/02 23:23, , 1F
我覺得這個討論串超有趣XDDDD
12/02 23:23, 1F

12/03 01:31, , 2F
作業怎麼可以拿來收錢,做做人情剛剛好..........
12/03 01:31, 2F

05/12 01:03, , 3F
看這幾篇好開心
05/12 01:03, 3F
文章代碼(AID): #1EsAkugH (CodeJob)
討論串 (同標題文章)
完整討論串 (本文為第 10 之 12 篇):
文章代碼(AID): #1EsAkugH (CodeJob)