iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
Software Development

C++超級菜鳥也可以懂的物件導向攻略系列 第 24

Day24 - C++ 虛擬貨幣程式Crypto bot - 顯示虛擬貨幣資料 File I/O, filesystem和資料儲存 Filestoring

  • 分享至 

  • xImage
  •  

繼上一篇Day23 C++ Crpto bot 功能 與 menu

咳咳,因為這是新手的C++筆記,也是剛剛在接觸crypto,講得很淺請老手見諒,關於何爲filesystem、資料夾輸出輸入,請搭File I/O直通車

這邊簡單複習如何輸出資料

注意:Xcode中需要做以下設定才能read file,不然會一直error重複懷疑自己智商,謹記善用谷歌大神。
在此引用StockOverflow解法:
Put your .txt files in the same directory where your main.cpp file is (or anywhere you like).

In Xcode go to Product > Scheme > Edit Scheme > Run test (on the right) > Options (middle top)

Down under Options check “Use custom working directory” and set it to the directory where you .txt files are located.

To work with the files, you will have to specify just file names, e.g. in_file.open("inputFile.txt"); no path is necessary.

首先要複習C++的file I/O檔案操作,輸出輸入是以電腦的角度喔
檔案類別.txt,文字檔案或是二近位置檔案,這邊是以輸入文字txt做示範。

  • fstream 開啟檔案以供讀寫

  • ifstream 從已有的檔案

  • ostream 像檔案

來做出Show Current Price

預期功能:輸入編號會顯示出該虛擬幣的價錢。

這邊需要提取file資料,我準備了三個不同txt檔案的資料,有bitcoin.txt、ETC.txt、USDT.txt。
先把當天的日期放進去

fstream file("BTC.txt", ios::in);
        if(file.is_open()){
            string s;
            while(file >> s){
                cout << s << endl;
            }
        }else{
            cout <<"Error";
        }
        file.close();
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;

int main() {
    ifstream infile("D.txt"); //讀檔案
    if(infile.is_open()){
        string s;
        while(infile>>s){
            cout<<s<<endl;
        }
    }else{
        cout <<"Error";
    }
     return 0;
}

注:至於如何把資料庫內的資料分類又是另一篇章節,這就要去sorting,有各種分類演算法,把數字從大排到小從小排到大(buble sort、Insertion Sort etc.)。或是弄成tree、linked list、array然後藉由key存取。

嗚嗚想想python爬蟲多方便,多輕鬆,一按資料庫就輸入進去
但是學好靠近底層的語言,這樣就會懂土法煉鋼,也就懂為什麼電腦會這樣跑了(遠目

我們有以下資料:
幣別 價錢/枚
BTC $19,098.33
ETH $1,343.09
USDT $1.00

首先要做出variable來裝輸入進程式的資料,很簡單,我們上面的資料只有幣別跟價錢而已。

    string crypto1, crypto2, crypto3; 
    string price1, price2, price3; 

然後呼叫出檔案,設定叫infile:

    ifstream infile("D.txt");

當我們在做更動時一定要記得,檔案必須是打開的,檔案.is_open()

if(infile.is_open()){
        infile >> crypto1 >> price1;
        infile >> crypto2 >> price2;
        infile >> crypto3 >> price3;
        
        cout << "Name:" <<crypto1<<" ";
        cout <<"price:"<< price1<<endl;
        cout << "Name:" <<crypto2 <<" ";
        cout <<"price:"<< price2<<endl;
        cout << "Name:" <<crypto3 <<" ";
        cout <<"price:"<< price3<<endl;

    }else{
        cout <<"Error";
    }
    infile.close();   //養成好習慣隨手關檔案,記得要把資料關起來

如同上面提到,資料輸入進程式需要有variable裝他們,所以如果不只幣別跟價錢,還有多出兩個volume, circulating spply的欄位要輸入,如下:

幣別 | 價錢/枚 | Volume | Circulating supply
BTC | $19,098.33 | 835,589 BTC | 19,174,043.00 BTC
那就只要再加上variable裝他們

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;

int main() {
    string price;
    string crypto;
    string volume;
    string circulating_supply;
    
    ifstream infile("D.txt");
    
    if(infile.is_open()){
                infile >> a1 >> price1 >> volume >> circulating;
       
                cout << "Name:" <<a1<<" " << "volume: " << volume;
                cout << "circulating supply: "<< circulating <<"price:"<< price1<<endl;
             }else{
        cout <<"Error";
    }
     return 0;
}

Reference: https://www.youtube.com/watch?v=I_aWPGCaaFA, cplusplus, Practical C++ Programming, stackOverflow


上一篇
Day23 C++虛擬貨幣Crypto Bot menu與功能雜談
下一篇
Day 25 C++ Polymorphism前言 - Dynamic memory和Pointer to structures
系列文
C++超級菜鳥也可以懂的物件導向攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言