Re: [討論] 修改CSV格式 請問這樣值多少錢?
感謝板上各方高手出來獻計,又讓小弟我回去重新檢視 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
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
討論串 (同標題文章)
完整討論串 (本文為第 10 之 12 篇):