finger_data.c
#include <time.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <stdbool.h>
#include "finger_data.h"
int main(void)
{
FILE *ReadDataFp = NULL;
FILE *WriteDataFp = NULL;
FILE *SortDataFp = NULL;
FILE *RandomDataFp = NULL;
char FilePath[PathNameSize] = "/media/sf_Ubuntushare_16.04/C/MyC/damon/";
char WriteDataFileName[PathNameSize] = "WriteData.txt";
char ReadDataFileName[PathNameSize] = "random28-10-25-51.txt";
char SortDataFileName[PathNameSize] = "Sort.txt";
char RandomDataFileName[PathNameSize] = "Random.xls";
int ReadPixelData[PiexlLen] = {};
int WritePixelData[PiexlLen] = {};
int RandomPixelData[PiexlLen] = {};
int len = height > width ? height : width;
int DiagonalData[len];
ReadDataFp = OpenCreateFile(ReadDataFp, FilePath, ReadDataFileName, false);
// WriteDataFp = OpenCreateFile(WriteDataFp, FilePath, WriteDataFileName, true);
SortDataFp = OpenCreateFile(SortDataFp, FilePath, SortDataFileName, true);
RandomDataFp = OpenCreateFile(RandomDataFp, FilePath, RandomDataFileName, true);
//Write Random data to text
damon_random(RandomPixelData, PiexlLen, 15000, 18200);
WrtiteReadFile(RandomDataFp, NULL, PiexlLen, RandomPixelData, NULL);
//Read data from random text
WrtiteReadFile(NULL, RandomDataFp, PiexlLen, NULL, ReadPixelData);
GetDiagonalDataFile(RandomDataFp, DiagonalData);
for (int i = 0; i < len; i++)
LOG_Damon("%8d ", DiagonalData[i]);
//Read data from text
// WrtiteReadFile(NULL, ReadDataFp, PiexlLen, NULL, ReadPixelData);
//Write data to text
// WrtiteReadFile(WriteDataFp, NULL, PiexlLen, ReadPixelData, NULL);
//Sort data from ReadPixelData
BubbleSort(ReadPixelData, PiexlLen);
//Write Sortdata to text
WrtiteReadFile(SortDataFp, NULL, PiexlLen, ReadPixelData, NULL);
fclose(ReadDataFp);
// fclose(WriteDataFp);
fclose(RandomDataFp);
return 0;
}
FILE *OpenCreateFile(FILE *FilePoint, char FilePath[], char FileName[], bool Create)
{
struct tm *t;
time_t tt;
char timestr[PathNameSize/2];
time(&tt);
t = localtime(&tt);
if (Create) {
snprintf(timestr, PathNameSize/2, "%d-%d-%d-%d-%s", t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec, FileName);
snprintf(FilePath, PathNameSize, "%s", timestr);
} else {
snprintf(timestr, PathNameSize/2, "%s", FileName);
snprintf(FilePath, PathNameSize, "%s", timestr);
}
FilePoint = fopen(FilePath, "a+");
// LOG_Damon("%s File Point = %p", __func__,FilePoint);
return FilePoint;
}
void WrtiteReadFile(FILE *WriteFilePoint, FILE *ReadFilePoint, int len, int WiteData[], int ReadData[])
{
int BaseData = 0, DebugCount = 0;
if (ReadFilePoint != NULL) {
fseek(ReadFilePoint,0L,SEEK_SET);
while (fscanf(ReadFilePoint, "%d", &BaseData) != EOF) {
ReadData[DebugCount] = BaseData;
DebugCount++;
}
}
if (WriteFilePoint != NULL) {
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
fprintf(WriteFilePoint, "%8d ", WiteData[i * width + j]);
}
fprintf(WriteFilePoint, "\n");
}
}
}
void damon_print(int len, int printdata[])
{
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
LOG_Damon("%8d ", printdata[i * width + j]);
}
}
}
void BubbleSort(int a[], int len)
{
int i, j, temp;
for (j = 0; j < len - 1; j++) {
for (i = 0; i < len - 1 - j; i++) {
if (a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
}
void damon_random(int Random[], int len, int MinNumber, int MaxNumber)
{
srand(time(NULL));
for (int i = 0; i < len; i++) {
Random[i] = rand() % (MaxNumber - MinNumber + 1) + MinNumber;
}
}
void GetDiagonalDataFile(FILE *SourceFilePoint, int ReadData[])
{
int BaseData = 0, DebugCount = 0, StoreData[PiexlLen];
int len = height > width ? height : width;
if (SourceFilePoint != NULL) {
fseek(SourceFilePoint,0L,SEEK_SET);
while (fscanf(SourceFilePoint, "%d", &BaseData) != EOF) {
StoreData[DebugCount] = BaseData;
DebugCount++;
}
}
DebugCount = 0;
if (width > height) {
for (int i = 0, j = 0; i < height && j < width; ) {
ReadData[DebugCount] = StoreData[j + i * width];
j++;
i = damon_scale(j);
DebugCount++;
}
} else {
for (int i = 0, j = 0; i < height && j < width; ) {
ReadData[DebugCount] = StoreData[j + i * width];
i++;
j = damon_scale(i);
DebugCount++;
}
}
}
int damon_scale(int j)
{
float temp, Molecule, Denominator;
Molecule = height < width ? height : width;
Denominator = height > width ? height : width;
temp = (Molecule/Denominator) * j;
return (int)(temp + 0.5) > (int)temp ? (int)temp + 1 : (int)temp;
}
finger_data.h
#define PathNameSize 128
#define width 80
#define height 80
#define PiexlLen width * height
FILE *OpenCreateFile(FILE *FilePoint, char FilePath[], char FileName[], bool Create);
void WrtiteReadFile(FILE *WriteFilePoint, FILE *ReadFilePoint, int len, int WiteData[], int ReadData[]);
void damon_print(int len, int printdata[]);
void BubbleSort(int a[], int len);
void damon_random(int Random[], int len, int MinNumber, int MaxNumber);
int damon_scale(int j);
void GetDiagonalDataFile(FILE *SourceFilePoint, int ReadData[]);
#define LOG_TAG "Damon"
#define LOG_Damon(fmt,arg...) printf("[%s-In-%s-Func-At-%d] "fmt"\n",LOG_TAG, __func__, __LINE__,##arg)