将大数据载入内存中检索字符串

<pre name="code" class="cpp"><pre name="code" class="cpp">#define _CRT_SECURE_NO_WARNINGS

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

char **pp = NULL;  // 存储指针数组的地址

void initDataToMemory(char *path)
{
	pp = (char **)malloc(sizeof(char *)* 13180807);
	FILE *pf = fopen(path, "r");
	if (pf == NULL)
	{
		printf("Fail!\n");
	}
	else
	{
		for (int i = 0; i < 13180807; i++)
		{
			char str[275] = { 0 }; //读取字符串缓冲区
			fgets(str, 275, pf); //从文件中逐行读取字符串
			int strlength = strlen(str) + 1;//获取要分配的字符串的长度
			char *px = (char *)malloc(sizeof(char)*strlength);
			strcpy(px, str);
			px[strlength - 1] = '\0'; //设定最后一个字符为:'\0'
			pp[i] = px; //存储字符串的首地址到指针数组

		}
	}
	printf("载入内存成功!\n");
}

int getLine(char *path)
{
	FILE *pf;
	pf = fopen(path, "r");  //读取
	if (pf == NULL)
	{
		return -1;  //获取失败
	}
	else
	{
		int i = 0;
		while (!feof(pf)) //是否到文件末尾
			//返回值为0,表示没有到文件末尾
		{
			char str[275];
			fgets(str, 275, pf); //读取一行
			i++;  //统计行数
		}
		fclose(pf);

		return i;
	}
}
//共 13180807 行 *4/1024/1024  50M
//申请指针,每一个指针指向一行

int getFileSize(char *path)
{
	FILE *pf;
	pf = fopen(path, "r");  //读取
	if (pf == NULL)
	{
		return -1;  //获取失败
	}
	else
	{
		fseek(pf, 0, SEEK_END); //到文件末尾
		int num = ftell(pf);  //文件开头到当前位置一共多少字节
		fclose(pf);
		return num;
	}
}  

char *findStr(char *searchStr)
{
	for (int i = 0; i < 13180807; i++)
	{
		char *pTemp = strstr(pp[i], searchStr);
		//遍历所有的指针数组的地址,字符串查找
		if (pTemp != NULL)
		{
			printf("\n%s", pp[i]); //打印字符串
		}
	}
}

void main()
{
	/*char *path = "E:\\dangdangwang.txt";
	int num = getFileSize(path);
	printf("%d字节, %f K, %f M,%f G", num, num / 1024.0,
		num / 1024.0 / 1024.0, num / 1024.0 / 1024.0 / 1024.0);
<span style="white-space:pre">	</span>*/
	char *path = "E:\\dangdangwang.txt";

	//printf("\n\n有%d行\n", getLine(path));
	initDataToMemory(path);  //将文件数据载入内存

	while (1)  //在内存中检索
	{
		char searchStr[100] = { 0 };
		scanf("%s", searchStr);
		findStr(searchStr);
	}
	
	system("pause");
}


 
 

                
在 MATLAB 载入并操作字符串数组可以使用多种方法,其一些常见的方法包括直接通过文本文件导入、使用 cell 数组存储字符串以及利用特定函数如 `textscan` 或 `readtable` 进行数据读取。 ### 1. 直接通过文本文件导入 如果你有一个包含字符串的数据文件(例如 `.txt`, `.csv`, 或 `.dat` 格式),你可以使用 `importdata`, `readtable`, 或者 `textscan` 函数将其导入到 MATLAB 作为字符串数组。 #### 示例: 假设你有一个名为 `mydata.txt` 的文件,内容如下: ``` Hello, world! This is a string. ``` ```matlab % 使用readtable读取文本文件 T = readtable('mydata.txt', 'ReadVariableNames', false); % 将表格转换为字符串数组 S = table2cell(T{:,:}); % 显示结果 disp(S); ``` ### 2. 使用 cell 数组存储字符串 在编写代码时,可以直接创建一个 cell 数组来存储字符串。 ```matlab % 创建一个包含三个字符串的 cell 数组 stringsArray = {'Hello, world!', 'This is another string.', 'Yet one more string.'}; % 访问数组元素 disp(stringsArray{1}); % 输出第一个字符串 disp(stringsArray{2}); disp(stringsArray{3}); ``` ### 3. 使用 textscan 从输入流读取字符串 当处理需要解析格式化的文本输入时,`textscan` 可能是一个更有用的选择。它可以更精确地控制如何读取数据,并支持跳过或忽略空白字符等特性。 #### 示例: ```matlab fid = fopen('mydata.txt'); C = textscan(fid, '%s', 'Delimiter', '\n'); % 指定每一行都是字符串 fclose(fid); % 将读取的内容转化为一个字符串数组 stringsArray = C{1}; disp(stringsArray); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值