读取文件内容并排序

该C语言程序读取APlist.txt文件中的AP信息,依据第5列的信号强度、第1列的频道和第2列进行降序排序,然后将排序后的结果写入Dest.txt。程序不使用额外的库函数,如qsort,而是自定义了插入排序算法。
摘要由CSDN通过智能技术生成
  1. 写一个C语言程序实现以下功能:将扫描结果APlist.txt中的AP信息重新按照第5列信号强度进行降序排序,信号强度相同的按照第1列频道Ch降序排序,信号强度和频道相同的按照第二列降序排序。 并将排序后的结果输出到一个新的文件中。
  2. 要求:除了基础库基本字符串处理函数和文件操作的函数,不要使用诸如qsort等其他库函数。
  3. 源文件名:APlist.txt,目标文件名:Dest.txt

文件内容APlist.txt

1   cosy city hotel                  20:93:4d:7b:7f:87   NONE                   100      11b/g/n ABOVE  In  NO     
1   FWR9202-0C9948                   00:21:f2:0c:99:48   WPAPSK/AES             100      11b/g/n NONE   In  NO     
1   qingtongsuliaoshuiping           00:21:f2:ce:a1:00   WPAPSK/AES             100      11b/g/n ABOVE  In  NO     
1   Wireless_AP0C48E8                00:21:f2:0c:48:e8   WPA2PSK/AES            100      11b/g/n ABOVE  In  NO     
1   DRI_Router100                    00:21:f2:2a:b8:8c   WPA1PSKWPA2PSK/AES     100      11b/g/n NONE   In  NO     
1   zjst                             c8:3a:35:4c:27:e4   WPAPSK/AES             89       11b/g/n ABOVE  In  NO     
1   Wireless_1FXS_1                  00:01:9f:3a:00:38   NONE                   100      11b/g/n ABOVE  In  NO     
1   Wireless_1FXS_2                  02:01:9f:1a:00:38   NONE                   100      11b/g/n ABOVE  In  NO     
1   Wireless_1FXS_3                  02:01:9f:2a:00:38   NONE                   100      11b/g/n ABOVE  In  NO     
1   Wireless_AP000000                22:33:55:88:89:66   NONE                   100      11b/g/n ABOVE  In  NO     
1   FIP11W-000008                    00:0c:fe:00:00:08   WPA2PSK/AES            100      11b/g/n ABOVE  In  NO     
1   Wireless_AP000003                22:33:55:b8:89:66   NONE                   100      11b/g/n ABOVE  In  NO     
6   evergreen                        88:25:93:5d:d4:e7   WPA1PSKWPA2PSK/AES     100      11b/g/n NONE   In  NO     
6   CAMBIUM_2.4GHz_0C97F4            00:21:f2:0c:97:f4   WPA2PSK/AES            100      11b/g/n ABOVE  In  NO     
6   LXCT                             30:b4:9e:62:52:8e   WPA1PSKWPA2PSK/TKIPAES 73       11b/g/n BELOW  In  NO     
6   G801TEST                         00:21:f2:10:b9:54   NONE                   100      11b/g/n ABOVE  In  NO     
7   VW21010CC24                      00:21:f2:10:cc:24   WPA1PSKWPA2PSK/TKIPAES 100      11b/g/n BELOW  In  NO     
10  Hi-WiFibg                        00:21:f2:04:37:fc   WEP                    100      11b/g/n NONE   In  NO     
10  IP542N_176                       00:21:f2:04:37:fd   WPA2PSK/TKIPAES        100      11b/g/n NONE   In  NO     
10                                   00:21:f2:04:37:fe   WPA1PSKWPA2PSK/TKIPAES 100      11b/g/n NONE   In  NO     
10                                   00:21:f2:04:37:ff   WEP                    100      11b/g/n NONE   In  NO     
10  SFP300-38F744                    60:03:47:38:f7:44   WPAPSK/AES             99       11b/g/n BELOW  In  NO     
11  FLYINGVOICE-WORKS                00:21:f2:09:3b:69   WPA2PSK/AES            81       11b/g/n NONE   In  NO     
11  SFP300-0E66F0                    00:21:f2:0e:66:f0   WPAPSK/AES             100      11b/g/n BELOW  In  NO     
11                                   d8:5d:4c:2f:eb:52   NONE                   100      11b/g/n BELOW  In YES     
11  G801-0EC958                      00:21:f2:0e:c9:58   NONE                   100      11b/g/n BELOW  In  NO     
11  Wireless_AP325244                00:21:f2:11:33:67   WPAPSK/AES             89       11b/g/n BELOW  In  NO     
12  MSG1200_12ACC8                   00:21:f2:12:ac:c8   WPA2PSK/TKIPAES        70       11b/g/n BELOW  In  NO     
12                                   00:21:f2:12:ac:c9   WPA2PSK/TKIPAES        70       11b/g/n BELOW  In  NO     
13                                   00:21:f2:0d:6c:e0   WPA1PSKWPA2PSK/AES     100      11b/g/n NONE   In  NO     
13  91020D6CE0                       00:21:f2:0d:6c:e1   WPA1PSKWPA2PSK/AES     100      11b/g/n NONE   In  NO     
14  FV_509_INTERNET                  00:21:f2:33:00:28   WPAPSK/AES             100      11b/g/n NONE   In  NO     
14                                   00:21:f2:0d:6c:d8   WPA1PSKWPA2PSK/AES     100      11b/g/n NONE   In  NO     
14  91020D6CD8                       00:21:f2:0d:6c:d9   WPA1PSKWPA2PSK/AES     100      11b/g/n NONE   In  NO     

main.c文件


#include "main.h"


int main()
{
	FILE* fd_src = NULL;
	FILE* fd_dest = NULL;
	int lineSum = LINENUM;
	fd_src = fopen("APlist.txt", "r");
	if (fd_src == NULL) goto EXIT;
	fd_dest = fopen("Dest.txt", "w+");
	if (fd_dest == NULL) goto EXIT;
	
	LineData* (*ApData)[LINENUM] = malloc(sizeof(LineData)*LINENUM);
	if(ApData == NULL)
	{
		printf("---%d---",__LINE__);
		perror("error: Open up space error");
		goto EXIT;
	}
	for(int i = 0;i < LINENUM;i++)
	{
		(*ApData)[i] = NULL;
	}
	int Sum = ReadFile(&ApData, fd_src,&lineSum);
	InsertSort(ApData,Sum);
	for(int i = 0;i<Sum;i++)
	{
		fputs((*ApData)[i]->one,fd_dest);
		fputs((*ApData)[i]->two,fd_dest);
		fputs((*ApData)[i]->three,fd_dest);
		fputs((*ApData)[i]->four,fd_dest);
		fputs((*ApData)[i]->five,fd_dest);
		fputs((*ApData)[i]->six,fd_dest);
		fputs((*ApData)[i]->seven,fd_dest);
		fputs((*ApData)[i]->eight,fd_dest);
		fputs((*ApData)[i]->nine,fd_dest);
		fputc('\n',fd_dest);
	}

	EXIT:	
	if(fd_src != NULL) 
	{
		fclose(fd_src);
		fd_src = NULL;
	}
	if(fd_dest != NULL) 
	{
		fclose(fd_dest);
		fd_dest = NULL;
	}
	free(ApData);
	ApData = NULL;
	return 0;
}

int ReadFile(LineData* (**ret)[],FILE* fd_src,int* lineSum)
{
	char str[LINESTRNUM];
	memset(str,'\0',sizeof(str));
	int Sum = 0;
	while(NULL != fgets(str,LINESTRNUM,fd_src))
	{
		if(Sum == *lineSum)
		{
			int i = *lineSum;
			*lineSum += FIRSTLINEADD;
			LineData* (*ApDataTemp)[(*lineSum)] = malloc(sizeof(LineData*)*(*lineSum));
			if(ApDataTemp == NULL)
			{
				printf("---%d---",__LINE__);
				perror("error: Open up space error");
				goto EXIT;
			}
			for(int i = 0;i < LINENUM;i++)
			{
				(*ApDataTemp)[i] = NULL;
			}
			for(int i = 0;i<Sum;i++)
			{
				(*ApDataTemp)[i] = (**ret)[i];
			}
			free(*ret);
			*ret = ApDataTemp;
		}
		
		LineData* tempData = malloc(sizeof(LineData));
		(**ret)[Sum] = tempData;
		StrCut(tempData,str);
		tempData = NULL;
		Sum++;
	}
	EXIT:
	return Sum;
}

void ForCut(char* retList,char* str, int circulationNum,int* start)
{
	int i = 0;
	for(i = 0;i<circulationNum;i++)
	{
		retList[i] = str[*start];
		(*start)++;
	}
	retList[i] = '\0';
}


void StrCut(LineData* ret,char* str)
{
	int start = 0;
	int i = 0;
	char NumChange[20] = {'\0'};
	ForCut(ret->one,str,ONELIST,&start);
	ForCut(ret->two,str,TWOLIST,&start);
	ForCut(ret->three,str,THREELIST,&start);
	ForCut(ret->four,str,FOURLIST,&start);
	ForCut(ret->five,str,FIVELIST,&start);
	ForCut(ret->six,str,SIXLIST,&start);
	ForCut(ret->seven,str,SEVENLIST,&start);
	ForCut(ret->eight,str,EIGHTLIST,&start);
	ForCut(ret->nine,str,NINELIST,&start);
	return;
}


void InsertSort(LineData* (*ret)[],int Sum)
{
	int i = 0;
	int start = 1;
	while(start < Sum)
	{
		for(i = 0;i<start;i++)
		{
			if(Compare(ret,i,start))
			{
				break;
			}
			
		}
		start++;
	}
	return;
}

int Compare(LineData* (*ret)[], int i, int j)
{
	int numi = atoi((*ret)[i]->five);
	int numj = atoi((*ret)[j]->five);
	int flag = 0;
	if(numi > numj)
	{
		insert(ret,i,j);
		flag = 1;
	}
	else if(numi == numj)
	{
		numi = atoi((*ret)[i]->one);
		numj = atoi((*ret)[j]->one);
		if(numi > numj)
		{
			insert(ret,i,j);
			flag = 1;
		}
		else if(numi == numj)
		{
			int two_cmp = strcmp((*ret)[i]->two,(*ret)[j]->two); 
			if(two_cmp > 0)
			{
				insert(ret,i,j);
				flag = 1;
			}
		}
	}
	return flag;
}

void insert(LineData* (*ret)[], int i, int j)
{
	LineData* temporary = (*ret)[j];
	while(j > i)
	{
		(*ret)[j] = (*ret)[j-1];
		j--;
	}
	if(j == i)
	{
		(*ret)[i] = temporary;
	}
	return;
}






mian.h文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define LINENUM 30
#define LINESTRNUM 256
#define ONELIST 4
#define TWOLIST 33
#define THREELIST 20
#define FOURLIST 23
#define FIVELIST 9
#define SIXLIST 8
#define SEVENLIST 7
#define EIGHTLIST 4
#define NINELIST 4
#define FIRSTLINEADD 10




typedef struct
{
    char one[8] ;
    char two[64] ;
    char three[32] ;
    char four[32] ;
    char five[16] ;
    char six[16] ;
    char seven[8] ;
    char eight[8] ;
    char nine[8] ;
}LineData;



int ReadFile(LineData* (**ret)[],FILE* fd_src,int* lineSum);
void StrCut(LineData* ret,char* str);
void InsertSort(LineData* (*ret)[],int Sum);
int Compare(LineData* (*ret)[], int i, int j);
void insert(LineData* (*ret)[], int i, int j);






Makefile文件

test:
	gcc main.c -o test

clean:
	rm -rf test

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值