描述:按行读入文本文件“1.TXT”中的内容,按“,”分隔读入的行,并把每行的前10个字符存入leveldb。存入的规则为行号为key,每个字符的值为value。由于leveldb中一个key只能有一个value对应,因此我们需要建立10个数据库分别存储着10个value的值。最后输出每个数据库中的内容,为验证是否正确,取出每个数据库中key为8的value的值,与文本文件“1.TXT”文件第8行值对照,结果正确。
#include <iostream>
#include <string>
#include <stdio.h>
#include <assert.h>
#include "leveldb/db.h"
#include <windows.h>
//#include "leveldb/c.h"
using namespace std;
int main(void)
{
char szTest[1000] = {0};
int cnt = 0;//取每行前10个作为value值
int key=0;//key值
char *value[10];//split ","
leveldb::DB *db1,*db2,*db3,*db4,*db5,*db6,*db7,*db8,*db9,*db10;
leveldb::Options options;
options.create_if_missing = true;
// open
leveldb::Status status = leveldb::DB::Open(options,"./tmp/testdb1", &db1);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb2", &db2);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb3", &db3);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb4", &db4);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb5", &db5);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb6", &db6);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb7", &db7);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb8", &db8);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb9", &db9);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb10", &db10);
assert(status.ok());
FILE *fp = fopen("1.txt", "r");
if(NULL == fp)
{
printf("failed to open dos.txt\n");
return -1;
}
while(fgets(szTest, sizeof(szTest) - 1, fp)!=NULL)
{
key++;
char*temp = strtok(szTest,",");
cnt=0;
while(cnt<10)
{
value[cnt]=temp;//取出每行的前10个数,存入value[]中
temp = strtok(NULL,",");
cnt++;
}
status = db1->Put(leveldb::WriteOptions(), to_string(key), value[0]); //bd1:key==value[0]; to_string(key)把int转成string类型
assert(status.ok());
status = db2->Put(leveldb::WriteOptions(), to_string(key), value[1]); //bd2:key==value[1]
assert(status.ok());
status = db3->Put(leveldb::WriteOptions(), to_string(key), value[2]); //bd3:key==value[2]
assert(status.ok());
status = db4->Put(leveldb::WriteOptions(), to_string(key), value[3]); //bd4:key==value[3]
assert(status.ok());
status = db5->Put(leveldb::WriteOptions(), to_string(key), value[4]); //bd5:key==value[4]
assert(status.ok());
status = db6->Put(leveldb::WriteOptions(), to_string(key), value[5]); //bd6:key==value[5]
assert(status.ok());
status = db7->Put(leveldb::WriteOptions(), to_string(key), value[6]); //bd7:key==value[6]
assert(status.ok());
status = db8->Put(leveldb::WriteOptions(), to_string(key), value[7]); //bd8:key==value[7]
assert(status.ok());
status = db9->Put(leveldb::WriteOptions(), to_string(key), value[8]); //bd9:key==value[8]
assert(status.ok());
status = db10->Put(leveldb::WriteOptions(), to_string(key), value[9]); //bd10:key==value[9]
assert(status.ok());
//printf("%d %s %s %s %s %s %s %s %s %s %s\n",key,value[0],value[1],value[2],value[3],value[4],value[5],value[6],value[7],value[8],value[9]);
}
//read,输出每个数据库中的内容
leveldb::Iterator* it = db1->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db2->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db3->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
//Sleep(1000);
cout<<"=================="<<endl;
it = db4->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db5->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db6->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db7->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db8->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db9->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db10->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
string key_str = "8";
string value_str[10];
status = db1->Get(leveldb::ReadOptions(), key_str, &value_str[0]);
assert(status.ok());
status = db2->Get(leveldb::ReadOptions(), key_str, &value_str[1]);
assert(status.ok());
status = db3->Get(leveldb::ReadOptions(), key_str, &value_str[2]);
assert(status.ok());
status = db4->Get(leveldb::ReadOptions(), key_str, &value_str[3]);
assert(status.ok());
status = db5->Get(leveldb::ReadOptions(), key_str, &value_str[4]);
assert(status.ok());
status = db6->Get(leveldb::ReadOptions(), key_str, &value_str[5]);
assert(status.ok());
status = db7->Get(leveldb::ReadOptions(), key_str, &value_str[6]);
assert(status.ok());
status = db8->Get(leveldb::ReadOptions(), key_str, &value_str[7]);
assert(status.ok());
status = db9->Get(leveldb::ReadOptions(), key_str, &value_str[8]);
assert(status.ok());
status = db10->Get(leveldb::ReadOptions(), key_str, &value_str[9]);
assert(status.ok());
cout<<"key= "<<key_str<<" value= "<<value_str[0]<<" ,"<<value_str[1]<<" ,"<<value_str[2]<<" ,"<<value_str[3]<<" ,"<<value_str[4]<<" ,"<<value_str[5]<<" ,"<<value_str[6]<<" ,"<<value_str[7]<<" ,"<<value_str[8]<<" ,"<<value_str[9]<<endl;
// close
delete db1,db2,db3,db4,db5,db6,db7,db8,db9,db10;
fclose(fp);
return 0;
}
问题1:c++中int转string。
C++11标准增加了全局函数std::to_string,
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val)。
问题2:C++如何实现在程序中暂停一秒,再继续运行。
Sleep(1000); //挂起1000毫秒
要加头文件<windows.h>
问题3:C++分割字符串(以逗号分隔符为例)
#include<stdio.h>
#include<string.h>
int main(void)
{
char buf[]="hello@boy@this@is@heima";
char*temp = strtok(buf,"@");
while(temp)
{
printf("%s ",temp);
temp = strtok(NULL,"@");
}
return0;
}
Strtok()函数详解:该函数包含在"string.h"头文件中
函数原型:char* strtok (char* str,constchar* delimiters );
函数功能:
切割字符串,将str切分成一个个子串
函数参数:
str:在第一次被调用的时间str是传入需要被切割字符串的首地址;在后面调用的时间传入NULL。
delimiters:表示切割字符串(字符串中每个字符都会 当作分割符)。
函数返回值:
当s中的字符查找到末尾时,返回NULL;
如果查不到delimiter所标示的字符,则返回当前strtok的字符串的指针。
问题4:利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)
#include <stdio.h>
#include <string.h>
int main()
{
char szTest[1000] = {0};
int len = 0;
FILE *fp = fopen("1.txt", "r");
if(NULL == fp)
{
printf("failed to open dos.txt\n");
return -1;
}
while(!feof(fp))
{
memset(szTest, 0, sizeof(szTest));
fgets(szTest, sizeof(szTest) - 1, fp); // 包含了换行符
printf("%s", szTest);
}
fclose(fp);
printf("\n");
return 0;
}
代码2:加上时间统计。
#include <iostream>
#include <string>
#include <stdio.h>
#include <assert.h>
#include "leveldb/db.h"
#include <windows.h>
#include<ctime>
//#include "leveldb/c.h"
using namespace std;
int main(void)
{
char szTest[1000] = {0};
int cnt = 0;//取每行前10个作为value值
int key=0;//key值
char *value[10];//split ","
leveldb::DB *db1,*db2,*db3,*db4,*db5,*db6,*db7,*db8,*db9,*db10;
leveldb::Options options;
options.create_if_missing = true;
// open
leveldb::Status status = leveldb::DB::Open(options,"./tmp/testdb1", &db1);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb2", &db2);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb3", &db3);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb4", &db4);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb5", &db5);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb6", &db6);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb7", &db7);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb8", &db8);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb9", &db9);
assert(status.ok());
status = leveldb::DB::Open(options,"./tmp/testdb10", &db10);
assert(status.ok());
FILE *fp = fopen("1.txt", "r");
if(NULL == fp)
{
printf("failed to open dos.txt\n");
return -1;
}
cout<<"start……"<<endl;//统计执行时间
clock_t start,finish;
start=clock();
while(fgets(szTest, sizeof(szTest) - 1, fp)!=NULL)
{
key++;
char*temp = strtok(szTest,",");
cnt=0;
while(cnt<10)
{
value[cnt]=temp;
temp = strtok(NULL,",");
cnt++;
}
status = db1->Put(leveldb::WriteOptions(), to_string(key), value[0]); //bd1:key==value[0]; to_string(key)把int转成string类型
assert(status.ok());
status = db2->Put(leveldb::WriteOptions(), to_string(key), value[1]); //bd2:key==value[1]
assert(status.ok());
status = db3->Put(leveldb::WriteOptions(), to_string(key), value[2]); //bd3:key==value[2]
assert(status.ok());
status = db4->Put(leveldb::WriteOptions(), to_string(key), value[3]); //bd4:key==value[3]
assert(status.ok());
status = db5->Put(leveldb::WriteOptions(), to_string(key), value[4]); //bd5:key==value[4]
assert(status.ok());
status = db6->Put(leveldb::WriteOptions(), to_string(key), value[5]); //bd6:key==value[5]
assert(status.ok());
status = db7->Put(leveldb::WriteOptions(), to_string(key), value[6]); //bd7:key==value[6]
assert(status.ok());
status = db8->Put(leveldb::WriteOptions(), to_string(key), value[7]); //bd8:key==value[7]
assert(status.ok());
status = db9->Put(leveldb::WriteOptions(), to_string(key), value[8]); //bd9:key==value[8]
assert(status.ok());
status = db10->Put(leveldb::WriteOptions(), to_string(key), value[9]); //bd10:key==value[9]
assert(status.ok());
//printf("%d %s %s %s %s %s %s %s %s %s %s\n",key,value[0],value[1],value[2],value[3],value[4],value[5],value[6],value[7],value[8],value[9]);
}
finish=clock();
cout << finish-start << "/" << CLOCKS_PER_SEC << " (s) "<< endl;
//read
leveldb::Iterator* it = db1->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db2->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db3->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
//Sleep(1000);
cout<<"=================="<<endl;
it = db4->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db5->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db6->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db7->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db8->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db9->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
it = db10->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
}
assert(it->status().ok());
cout<<"=================="<<endl;
string key_str = "8";
string value_str[10];
status = db1->Get(leveldb::ReadOptions(), key_str, &value_str[0]);
assert(status.ok());
status = db2->Get(leveldb::ReadOptions(), key_str, &value_str[1]);
assert(status.ok());
status = db3->Get(leveldb::ReadOptions(), key_str, &value_str[2]);
assert(status.ok());
status = db4->Get(leveldb::ReadOptions(), key_str, &value_str[3]);
assert(status.ok());
status = db5->Get(leveldb::ReadOptions(), key_str, &value_str[4]);
assert(status.ok());
status = db6->Get(leveldb::ReadOptions(), key_str, &value_str[5]);
assert(status.ok());
status = db7->Get(leveldb::ReadOptions(), key_str, &value_str[6]);
assert(status.ok());
status = db8->Get(leveldb::ReadOptions(), key_str, &value_str[7]);
assert(status.ok());
status = db9->Get(leveldb::ReadOptions(), key_str, &value_str[8]);
assert(status.ok());
status = db10->Get(leveldb::ReadOptions(), key_str, &value_str[9]);
assert(status.ok());
cout<<"key= "<<key_str<<" value= "<<value_str[0]<<" ,"<<value_str[1]<<" ,"<<value_str[2]<<" ,"<<value_str[3]<<" ,"<<value_str[4]<<" ,"<<value_str[5]<<" ,"<<value_str[6]<<" ,"<<value_str[7]<<" ,"<<value_str[8]<<" ,"<<value_str[9]<<endl;
// close
delete db1,db2,db3,db4,db5,db6,db7,db8,db9,db10;
fclose(fp);
return 0;
}
代码3:一行作为一个value存储
#include <iostream>
#include <string>
#include <stdio.h>
#include <assert.h>
#include "leveldb/db.h"
#include <windows.h>
#include<ctime>
//#include "leveldb/c.h"
using namespace std;
int main(void)
{
char szTest[1000] = {0};
int cnt = 0;//取每行前10个作为value值
int key=0;//key值
char *value[10];//split ","
leveldb::DB *db1;
leveldb::Options options;
options.create_if_missing = true;
// open
leveldb::Status status = leveldb::DB::Open(options,"./tmp/testdb1", &db1);
assert(status.ok());
FILE *fp = fopen("data.txt", "r");
if(NULL == fp)
{
printf("failed to open dos.txt\n");
return -1;
}
cout<<"start……"<<endl;
clock_t start,finish;
start=clock();
while(fgets(szTest, sizeof(szTest) - 1, fp)!=NULL)
{
key++;
status = db1->Put(leveldb::WriteOptions(), to_string(key), szTest);
assert(status.ok());
}
finish=clock();
cout << finish-start << "/" << CLOCKS_PER_SEC << " (s) "<< endl;
//read
leveldb::Iterator* it = db1->NewIterator(leveldb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ": " <<
it->value().ToString() << std::endl;
Sleep(1000);
}
assert(it->status().ok());
cout<<"=================="<<endl;
// close
delete db1;
fclose(fp);
return 0;
}