Btrieve 2
読み取り中…
検索中…
一致する文字列を見つけられません
bfilter.cpp

これは C++ で書かれたフィルターの使用例です。

#include <stdio.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <stdint.h>
#include "btrieveCpp.h"
static char *btrieveFileName = (char *)"squaresAndSquareRoots.btr";
#ifndef __GNUC__
#define snprintf _snprintf
#endif
#define MIN_X 0
#define MAX_X 255
#pragma pack(1)
typedef struct {
uint8_t x;
uint16_t xSquared;
double xSquareRoot;
char text[128];
} record_t;
#pragma pack()
createFile(BtrieveClient *btrieveClient)
{
BtrieveFileAttributes btrieveFileAttributes;
// If SetFixedRecordLength() fails.
if ((status = btrieveFileAttributes.SetFixedRecordLength(sizeof(record_t))) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFileAttributes::SetFixedRecordLength():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If FileCreate() fails.
if ((status = btrieveClient->FileCreate(&btrieveFileAttributes, btrieveFileName, Btrieve::CREATE_MODE_OVERWRITE)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveClient::FileCreate():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
leave:
return status;
}
openFile(BtrieveClient *btrieveClient, BtrieveFile *btrieveFile)
{
// If FileOpen() fails.
if ((status = btrieveClient->FileOpen(btrieveFile, btrieveFileName, NULL, Btrieve::OPEN_MODE_NORMAL)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveClient::FileOpen():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
leave:
return status;
}
retrieveRecord(BtrieveFile *btrieveFile, char *key)
{
BtrieveBulkRetrieveAttributes btrieveBulkRetrieveAttributes;
BtrieveBulkRetrieveResult btrieveBulkRetrieveResult;
BtrieveFilter btrieveFilter;
int i;
int recordCount;
record_t record;
// If SetComparison() fails.
{
printf("Error: BtrieveFilter::SetComparison():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetComparisonConstant() fails.
if ((status = btrieveFilter.SetComparisonConstant((char *)key, 1)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFilter::SetComparisonConstant():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetConnector() fails.
{
printf("Error: BtrieveFilter::SetConnector():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetField() fails.
if ((status = btrieveFilter.SetField(25, 1, Btrieve::DATA_TYPE_CHAR)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFilter::SetField():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If AddFilter() fails.
if ((status = btrieveBulkRetrieveAttributes.AddFilter(&btrieveFilter)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveBulkRetrieveAttributes::AddFilter():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetConnector() fails.
{
printf("Error: BtrieveFilter::SetConnector():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetField() fails.
if ((status = btrieveFilter.SetField(32, 1, Btrieve::DATA_TYPE_CHAR)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFilter::SetField():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetComparisonField() fails.
if ((status = btrieveFilter.SetComparisonField(27)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFilter::SetComparisonField():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If AddFilter() fails.
if ((status = btrieveBulkRetrieveAttributes.AddFilter(&btrieveFilter)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveBulkRetrieveAttributes::AddFilter():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetCaseSensitivity() fails.
{
printf("Error: BtrieveFilter::SetACSMode():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetComparison() fails.
{
printf("Error: BtrieveFilter::SetComparison():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetConnector() fails.
{
printf("Error: BtrieveFilter::SetConnector():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetField() fails.
if ((status = btrieveFilter.SetField(20, 1, Btrieve::DATA_TYPE_CHAR)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFilter::SetField():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetComparisonConstant() fails.
if ((status = btrieveFilter.SetComparisonConstant("E", 1)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFilter::SetComparisonConstant():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If AddFilter() fails.
if ((status = btrieveBulkRetrieveAttributes.AddFilter(&btrieveFilter)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveBulkRetrieveAttributes::AddFilter():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetACSName() fails.
if ((status = btrieveFilter.SetACSName("u54-msft_enus_0")) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFilter::SetACSName():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetComparison() fails.
{
printf("Error: BtrieveFilter::SetComparison():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetConnector() fails.
{
printf("Error: BtrieveFilter::SetConnector():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetField() fails.
if ((status = btrieveFilter.SetField(19, 1, Btrieve::DATA_TYPE_CHAR)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFilter::SetField():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetComparisonConstant() fails.
if ((status = btrieveFilter.SetComparisonConstant("R", 1)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFilter::SetComparisonConstant():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If AddFilter() fails.
if ((status = btrieveBulkRetrieveAttributes.AddFilter(&btrieveFilter)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveBulkRetrieveAttributes::AddFilter():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If AddField() fails.
if ((status = btrieveBulkRetrieveAttributes.AddField(0, sizeof(record))) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveBulkRetrieveAttributes::AddField():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetMaximumRecordCount() fails.
if ((status = btrieveBulkRetrieveAttributes.SetMaximumRecordCount(MAX_X - MIN_X + 1)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveBulkRetrieveAttributes::SetMaximumRecordCount():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetMaximumRejectCount() fails.
if ((status = btrieveBulkRetrieveAttributes.SetMaximumRejectCount(MAX_X - MIN_X + 2)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveBulkRetrieveAttributes::SetMaximumRejectCount():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetSkipCurrentRecord() fails.
if ((status = btrieveBulkRetrieveAttributes.SetSkipCurrentRecord(false)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveBulkRetrieveAttributes::SetSkipCurrentRecord():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If RecordRetrieveFirst() fails.
if (btrieveFile->RecordRetrieveFirst(Btrieve::INDEX_NONE, (char *)&record, sizeof(record)) != sizeof(record))
{
status = btrieveFile->GetLastStatusCode();
printf("Error: BtrieveFile::RecordRetrieveFirst():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If BulkRetrieveNext() fails.
if ((status = btrieveFile->BulkRetrieveNext(&btrieveBulkRetrieveAttributes, &btrieveBulkRetrieveResult)) != Btrieve::STATUS_CODE_END_OF_FILE)
{
printf("Error: BtrieveFile::BulkRetrieveNext():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
else
{
}
// If GetRecordCount() fails.
if ((recordCount = btrieveBulkRetrieveResult.GetRecordCount()) == -1)
{
status = btrieveBulkRetrieveResult.GetLastStatusCode();
printf("Error: BtrieveBulkRetrieveResult::GetRecordCount():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
for (i = 1; i <= recordCount; i++)
{
// If GetRecord() fails.
if (btrieveBulkRetrieveResult.GetRecord(i, (char *)&record, sizeof(record)) != sizeof(record))
{
status = btrieveBulkRetrieveResult.GetLastStatusCode();
printf("Error: BtrieveBulkRetrieveResult::GetRecord():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If GetRecordCursorPosition() fails.
if (btrieveBulkRetrieveResult.GetRecordCursorPosition(i) < 0)
{
status = btrieveBulkRetrieveResult.GetLastStatusCode();
printf("Error: BtrieveBulkRetrieveResult::GetRecordCursorPosition():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If GetRecordLength() fails.
if (btrieveBulkRetrieveResult.GetRecordLength(i) != sizeof(record))
{
status = btrieveBulkRetrieveResult.GetLastStatusCode();
printf("Error: BtrieveBulkRetrieveResult::GetRecordLength():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
printf("record: (%u, %u, %g, %s)\n", record.x, record.xSquared, record.xSquareRoot, record.text);
}
leave:
return status;
}
loadFile(BtrieveFile *btrieveFile)
{
int i;
record_t record;
for (i = MIN_X; i <= MAX_X; i++)
{
record.x = (uint8_t)i;
record.xSquared = (uint16_t)(i * i);
record.xSquareRoot = sqrt((double)i);
if ((i % 2) == 0)
{
snprintf(record.text, sizeof(record.text), "The square of %03d is %05d and its square root is %f.", record.x, record.xSquared, record.xSquareRoot);
}
else
{
snprintf(record.text, sizeof(record.text), "The SQUARE of %03d is %05d and its square root is %f.", record.x, record.xSquared, record.xSquareRoot);
}
record.text[sizeof(record.text) - 1] = '\0';
// If RecordCreate() fails.
if ((status = btrieveFile->RecordCreate((char *)&record, sizeof(record))) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFile::RecordCreate():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
}
leave:
return status;
}
closeFile(BtrieveClient *btrieveClient, BtrieveFile *btrieveFile)
{
// If FileClose() fails.
if ((status = btrieveClient->FileClose(btrieveFile)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveClient::FileClose():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
leave:
return status;
}
deleteFile(BtrieveClient *btrieveClient)
{
// If FileDelete() fails.
if ((status = btrieveClient->FileDelete(btrieveFileName)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveClient::FileDelete():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
leave:
return status;
}
createIndex(BtrieveFile *btrieveFile)
{
BtrieveIndexAttributes btrieveIndexAttributes;
BtrieveKeySegment btrieveKeySegment;
// If SetField() fails.
if ((status = btrieveKeySegment.SetField(11, 128, Btrieve::DATA_TYPE_ZSTRING)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveKeySegment::SetField():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If AddKeySegment() fails.
if ((status = btrieveIndexAttributes.AddKeySegment(&btrieveKeySegment)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveIndexAttributes::AddKeySegment():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If SetACSName() fails.
if ((status = btrieveIndexAttributes.SetACSName("u54-msft_enus_0")) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveIndexAttributes::SetACSName():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
// If IndexCreate() fails.
if ((status = btrieveFile->IndexCreate(&btrieveIndexAttributes)) != Btrieve::STATUS_CODE_NO_ERROR)
{
printf("Error: BtrieveFile::IndexCreate():%d:%s.\n", status, Btrieve::StatusCodeToString(status));
goto leave;
}
leave:
return status;
}
int
main(int argc, char *argv[])
{
static const char *usage = "Usage: %s <digit>\n";
BtrieveClient btrieveClient;
BtrieveFile btrieveFile;
char key;
// If the incorrect number of arguments were given.
if (argc != 2)
{
printf(usage, argv[0]);
goto leave;
}
// If digit is out of range.
if ((isdigit(argv[1][0]) == 0) || (argv[1][1] != '\0'))
{
printf(usage, argv[0]);
goto leave;
}
key = (char)argv[1][0];
// If createFile() fails.
if ((status = createFile(&btrieveClient)) != Btrieve::STATUS_CODE_NO_ERROR)
{
goto leave;
}
// If openFile() fails.
if ((status = openFile(&btrieveClient, &btrieveFile)) != Btrieve::STATUS_CODE_NO_ERROR)
{
goto leave;
}
// If createIndex() fails.
if ((status = createIndex(&btrieveFile)) != Btrieve::STATUS_CODE_NO_ERROR)
{
goto leave;
}
// If loadFile() fails.
if ((status = loadFile(&btrieveFile)) != Btrieve::STATUS_CODE_NO_ERROR)
{
goto leave;
}
// If retrieveRecord() fails.
if ((status = retrieveRecord(&btrieveFile, &key)) != Btrieve::STATUS_CODE_NO_ERROR)
{
goto leave;
}
// If closeFile() fails.
if ((status = closeFile(&btrieveClient, &btrieveFile)) != Btrieve::STATUS_CODE_NO_ERROR)
{
goto leave;
}
// If deleteFile() fails.
if ((status = deleteFile(&btrieveClient)) != Btrieve::STATUS_CODE_NO_ERROR)
{
goto leave;
}
leave:
// If there wasn't a failure.
return 0;
return 1;
}
Btrieve 一括取得属性クラス。
Definition btrieveCpp.h:3502
Btrieve::StatusCode AddFilter(BtrieveFilter *btrieveFilter)
フィルターを追加します。
Btrieve::StatusCode AddField(int offset, int length)
フィールドを追加します。
Btrieve::StatusCode SetMaximumRecordCount(int maximumRecordCount)
最大レコード数を設定します。
Btrieve::StatusCode SetMaximumRejectCount(int maximumRejectCount)
最大リジェクト カウントを設定します。
Btrieve::StatusCode SetSkipCurrentRecord(bool skipCurrentRecord)
現在のレコードのスキップを設定します。
Btrieve 一括取得結果クラス。
Definition btrieveCpp.h:3626
int GetRecordLength(int recordNumber)
レコード長を取得します。
int GetRecordCount()
レコード数を取得します。
int GetRecord(int recordNumber, char *record, int recordSize)
レコードを取得します。
Btrieve::StatusCode GetLastStatusCode()
最新のステータス コードを取得します。
long long GetRecordCursorPosition(int recordNumber)
レコードのカーソル位置を取得します。
Btrieve クライアント クラス。
Definition btrieveCpp.h:1388
Btrieve::StatusCode FileCreate(BtrieveFileAttributes *btrieveFileAttributes, const char *fileName, Btrieve::CreateMode createMode, Btrieve::LocationMode locationMode=Btrieve::LOCATION_MODE_NO_PREFERENCE)
ファイルを作成します。
Btrieve::StatusCode FileClose(BtrieveFile *btrieveFile)
ファイルを閉じます。
Btrieve::StatusCode FileDelete(const char *fileName)
ファイルを削除します。
Btrieve::StatusCode FileOpen(BtrieveFile *btrieveFile, const char *fileName, const char *ownerName, Btrieve::OpenMode openMode, Btrieve::LocationMode locationMode=Btrieve::LOCATION_MODE_NO_PREFERENCE)
ファイルを開きます。
Btrieve ファイル属性クラス。
Definition btrieveCpp.h:2448
Btrieve::StatusCode SetFixedRecordLength(int fixedRecordLength)
固定レコード長を設定します。
Btrieve ファイル クラス。
Definition btrieveCpp.h:1729
Btrieve::StatusCode RecordCreate(char *record, int recordLength)
レコードを作成します。
Btrieve::StatusCode IndexCreate(BtrieveIndexAttributes *btrieveIndexAttributes)
インデックスを作成します。
int RecordRetrieveFirst(Btrieve::Index index, char *record, int recordSize, Btrieve::LockMode lockMode=Btrieve::LOCK_MODE_NONE)
先頭のレコードを取得します。
Btrieve::StatusCode BulkRetrieveNext(BtrieveBulkRetrieveAttributes *bulkRetrieveAttributes, BtrieveBulkRetrieveResult *bulkRetrieveResult, Btrieve::LockMode lockMode=Btrieve::LOCK_MODE_NONE)
次の一括取得。
Btrieve::StatusCode GetLastStatusCode()
最新のステータス コードを取得します。
Btrieve フィルター クラス。
Definition btrieveCpp.h:3392
Btrieve::StatusCode SetComparisonConstant(const char *constant, int constantLength)
比較定数を設定します。
Btrieve::StatusCode SetACSMode(Btrieve::ACSMode ACSMode)
代替照合順序モードを設定します。
Btrieve::StatusCode SetACSName(const char *name)
代替照合順序名を設定します。
Btrieve::StatusCode SetComparison(Btrieve::Comparison comparison)
比較を設定します。
Btrieve::StatusCode SetField(int offset, int length, Btrieve::DataType dataType)
フィールドを設定します。
Btrieve::StatusCode SetConnector(Btrieve::Connector connector)
フィールド コネクタを設定します。
Btrieve::StatusCode SetComparisonField(int offset)
比較フィールドを設定します。
Btrieve インデックス属性クラス。
Definition btrieveCpp.h:3716
Btrieve::StatusCode AddKeySegment(BtrieveKeySegment *btrieveKeySegment)
キー セグメントを追加します。
Btrieve::StatusCode SetACSName(const char *ACSName)
代替照合順序名を設定します。
Btrieve キー セグメント クラス。
Definition btrieveCpp.h:3874
Btrieve::StatusCode SetField(int offset, int length, Btrieve::DataType dataType)
フィールドを設定します。
@ COMPARISON_EQUAL
等しい。
Definition btrieveCpp.h:85
@ COMPARISON_GREATER_THAN_OR_EQUAL
以上。
Definition btrieveCpp.h:93
static const char * StatusCodeToString(StatusCode statusCode)
ステータス コードを文字列として返します。
@ CREATE_MODE_OVERWRITE
上書きする。
Definition btrieveCpp.h:72
StatusCode
Btrieve ステータス コード。
Definition btrieveCpp.h:713
@ STATUS_CODE_UNKNOWN
-7 - 不明。
Definition btrieveCpp.h:1194
@ STATUS_CODE_NO_ERROR
0 - エラーはありません。
Definition btrieveCpp.h:715
@ STATUS_CODE_END_OF_FILE
9 - ファイルの終わり(EOF)です。
Definition btrieveCpp.h:733
@ OPEN_MODE_NORMAL
ノーマル。
Definition btrieveCpp.h:606
@ CONNECTOR_AND
And。
Definition btrieveCpp.h:112
@ CONNECTOR_LAST
末尾。
Definition btrieveCpp.h:110
@ ACS_MODE_CASE_INSENSITIVE
大文字小文字無視。
Definition btrieveCpp.h:61
@ DATA_TYPE_ZSTRING
ZString(ヌル終端文字列)。
Definition btrieveCpp.h:201
@ DATA_TYPE_CHAR
Char(文字)。
Definition btrieveCpp.h:199
@ INDEX_NONE
なし。
Definition btrieveCpp.h:553