在 c++ 中从 txt 文件中提取条目的代码优化问题
Code optimization question for pulling entry from txt file in c++
>我在下面开发了一些代码,这些代码将从列表中提取条目并构建一系列条目供以后使用。我使用的列表和代码如下。
使用 ifstream 函数,我从列表中抓取字符,每次代码到达下一行字符或n
时,代码将编译文本,构建字符串并移动到下一行。
这对于从 txt 文件中提取是否有效,它可以工作但感觉效率低下。
文本文件列表
name
title
year
manufacturer
developer
genre
cloneOf
players
ctrltype
buttons
joyways
rating
score
我正在尝试优化的当前代码
#include "pch.h"
#include <iostream>
#include <string>
#include <fstream>
std::string sql;
std::string Entryname;
std::string Entryappends;
int main()
{
std::ifstream MetaEntries ("c:\CodeRepo/List.txt", std::ifstream::in);
sql.append("CREATE TABLE IF NOT EXISTS Meta(");
sql.append("collectionName TEXT KEY,");
char c = MetaEntries.get();
while (MetaEntries.good()) {
if (c == 'n') {
Entryappends = std::string(" TEXT NOT NULL DEFAULT '', ");
sql.append(Entryname + Entryappends);
Entryname.clear();
}
Entryname += c;
c = MetaEntries.get();
// std::cout << Entryname;
}
MetaEntries.close();
Entryappends = std::string(" TEXT NOT NULL DEFAULT '';");
sql.append(Entryname + Entryappends);
sql.append("CREATE UNIQUE INDEX IF NOT EXISTS MetaUniqueId ON Meta(collectionName, name);");
std::cout << sql;
return 0;
}
输出:几乎它完全按照预期工作。
CREATE TABLE IF NOT EXISTS Meta(collectionName TEXT KEY,name TEXT NOT NULL DEFAULT '',
title TEXT NOT NULL DEFAULT '',
year TEXT NOT NULL DEFAULT '',
manufacturer TEXT NOT NULL DEFAULT '',
developer TEXT NOT NULL DEFAULT '',
genre TEXT NOT NULL DEFAULT '',
cloneOf TEXT NOT NULL DEFAULT '',
players TEXT NOT NULL DEFAULT '',
ctrltype TEXT NOT NULL DEFAULT '',
buttons TEXT NOT NULL DEFAULT '',
joyways TEXT NOT NULL DEFAULT '',
rating TEXT NOT NULL DEFAULT '',
score TEXT NOT NULL DEFAULT '';CREATE UNIQUE INDEX IF NOT EXISTS MetaUniqueId ON Meta(collectionName, name);
我认为您可以尝试逐字阅读,或者根据文本文件的结构,甚至可以逐行阅读。希望这有帮助。
您可以使用 getline
[...]
std::ifstream metaEntries ("c:\CodeRepo/List.txt", std::ifstream::in);
sql.append("CREATE TABLE IF NOT EXISTS Meta(");
sql.append("collectionName TEXT KEY,");
string line = "";
while (std::getline(metaEntries, line)) {
// don't use global variables. This should probably be a constant:
std::string entryAppends = std::string(" TEXT NOT NULL DEFAULT '', ");
sql.append(line + entryAppends);
}
if (cin.bad()) {
// IO error
} else if (!cin.eof()) {
// format error (not possible with getline but possible with operator>>)
} else {
// format error (not possible with getline but possible with operator>>)
// or end of file (can't make the difference)
}
MetaEntries.close();
[...]
约定使用小写字母表示变量名,使用大写字母表示类、结构和枚举,以及使用全大写字母表示常量。
相关文章:
- 代码厨师问题伊什瓦拉(应许之地)
- 我关于函数"Assert"的C++代码有问题
- 无法理解代码背后的逻辑,这是在两个给定数字之间生成素数的优化问题
- 为什么主机不显示?(C++和代码处理器问题)
- "Rock, paper, scissors" C++代码的问题
- 智能手机代码厨师问题逻辑混乱
- 使用多态性解决代码重复问题
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- 关于使用类型转换优化除法代码的问题
- 使用 const double* const 作为模板参数 - 代码性能问题
- 我有一个关于我的战斗系统HP代码的问题
- 为什么没有参数的构造函数似乎是此代码的问题
- 中止陷阱 - 我的代码有问题
- C和C 中的代码优化
- 从远程主机中编译C 11代码的问题
- 我的链接列表反向递归方法的代码的问题是什么?
- C++ 我的代码有问题
- 使用清理代码优化多个出口点
- 在 c++ 中从 txt 文件中提取条目的代码优化问题
- iPhone代码优化问题