私はファイルを使ってプロジェクトを進めています。 プロジェクトのパート1は、いくつかのオブジェクトをテキストファイルに追加/削除してソートすることでしたので、すでにこれらの関数を実装しています。 パート2は、バイナリファイルの追加/削除とソートを行う手段です。 私の考えは、バイナリファイルをテキストファイルに変換する "マジック関数"を持っていることです。上記の関数を使うよりも(テキストファイルだけをサポートしているので)何でもお願いします - add obejcts;テキストファイルからバイナリファイルへの "魔法の機能"で再び変換するよりも。 テキストファイル内のすべての行は、「候補者」と呼ばれるオブジェクトです。文字列ID、文字列名、文字列パーティ たとえば、最初の行は次のようになります。 201、Drumd、Trump、Republican この「マジック機能」はどこにありますか? ありがとうございました。バイナリからテキストへのファイルとバイナリへのテキストファイル
答えて
の意味はの意味を知る必要があるため、特にバイナリデータの場合は明確ではないため、テキストとバイナリデータの間で変換する一般的な方法はありません。
あなたのクラスは既にあなたのデータが意味するものを知っているので、あなたのクラスだけがテキストとして自らを読み込み、それ自身をバイナリとして書くことができます。しかし、あなたのクラスでテキストやバイナリとして読み書きを実装すると、変換の必要性はなくなります。
私は、あなたのクラスでテキストやバイナリとして読み書きを実装することが、最初にやってみたいことであると確信しています。
クラスにはstd::string
が含まれています。そこバイナリとしてそれらを書くの標準的な方法はありませんが、一つの方法は、第1の長さを書き込み、その後、コンテンツを作成することです:
void WriteString(const std::string& s, std::ofstream& os)
{
size_t size = s.size();
os.write(reinterpret_cast<char*>(&size), sizeof(size_t));
os.write(s.c_str(), size);
}
読書の逆のプロセスは、コンテンツを第1の長さを読み取り、意味します。あなたはまっすぐにそのメモリ・バッファが連続することが保証されていないためstd::string
にコンテンツを読み取ることができないので、あなたは、仲介者としてstd::vector<char>
を使用する必要があります。今すぐ
std::string ReadString(std::ifstream& is)
{
size_t size;
is.read(reinterpret_cast<char*>(&size), sizeof(size_t));
std::vector<char> buffer(size);
is.read(&buffer[0], size);
return std::string(&buffer[0], size);
}
書いたりなど、あなたのCandidate
オブジェクトを読み取るためにバイナリ、あなただけの時間で、フィールド1を書き込みまたは読み取りするには、これらの二つの機能を使用する必要があります。
void Candidate::Write(std::ofstream& os) const
{
WriteString(id, os);
WriteString(name, os);
WriteString(last_name, os);
WriteString(party, os);
}
void Candidate::Read(std::ifstream& is)
{
id = ReadString(is);
name = ReadString(is);
last_name = ReadString(is);
party = ReadString(is);
}
あなたが読書のための「空」のオブジェクトを作成するためにあなたのCandidate
クラスのデフォルトコンストラクタが必要になります、そして必要になりますおそらく候補者の数をあなたは何回読み返すべきかを知っています。
バイナリファイルにはこれより多くのものがあります。実際には、ランダムアクセスを実装してメリットを得たいと思うかもしれませんが、これで起動するはずです。
- 1. ユニコードからバイナリへ?
- 2. バイナリへのシリアライズとデシリアライズ
- 3. Cのバイナリからcharへの変換
- 4. Python:バイナリからイメージへの変換
- 5. Cのバイナリへのパス
- 6. バイナリ "|"への無効なオペランド
- 7. バイナリからテキストへのエンコード、非印字文字、プロトコル・バッファー、MongoDBのとBSON
- 8. もっとPythonicのバイナリへの変換?
- 9. ルビー - ネット:: FTP - バイナリとテキストファイル
- 10. 最も効率的なバイナリからテキストへのエンコーディングは何ですか?
- 11. ファイルからの動的バイナリ
- 12. Javaの画像へのJSONバイナリ配列
- 13. バイナリへの無効なオペランドのエラー
- 14. Java(配列)のバイナリから10進への変換の問題
- 15. グレイからバイナリへのイメージの使用R
- 16. C++からC#へのバイナリ読み取り関数の変換
- 17. 12月からJSのバイナリへの変換
- 18. バイナリ検索ツリーへの配列クイック
- 19. バイナリ検索ツリーへの挿入
- 20. ファイルからフロートへのテキスト
- 21. resxファイルからのテキストファイルへのアクセス
- 22. Wavファイルからテキストへのテキスト
- 23. Javaの1つのストリームからテキストとバイナリを読み取る
- 24. MIMEメールの解析、バイナリの添付ファイルとテキストの変換
- 25. テキストファイルのバイナリ検索を行う方法
- 26. CMake:MPIヘッダーとバイナリへのパスを手動で設定する
- 27. Javascriptのバイナリ文字列への配列ですか?
- 28. android.view.InflateException:バイナリXMLファイル
- 29. C++のwhileループを使用したバイナリから10進数への変換
- 30. EF4バイナリへのvarbinary(max)のマッピング - コードの最初のエラー
Googleで「base64 encoding」を検索してください。 –
私はそれが要件の精神にあるとは思わない。バイナリファイルを使用する理由は、オブジェクトの追加や削除が容易になるためです。 –
@MartinBroadhurstだから何をお勧めしますか? –