在 C 中逐行读取文件,
Reading Files Line by Line in C,
我一直致力于创建类似于下面的 Huffman Table。
我想做的是我有一些 C 代码可以翻译一组字母和一组它们的频率,我现在正在尝试读取一个文件并将文件的行号转换为翻译成匹配的 ASCII 码(第 32 行将转换为 ASCII 码 32)并取该行的内容。我是 C 的新手,还没有探索过获取文件,我可以在本质上使用一些技巧。
- 正在加载文件
- 逐行读取文件并将数字内容分配给数组
- 然后抓取 # 行,然后将其转换为匹配的 ASCII 代码。
如果需要,我可以 post 我的代码,但我更困惑于获取文件作为我的输入。
int main(int argc, char* argv[])
{
char arr[127];
int freq[127];
int num_of_line = 127;
int size = sizeof(arr) / sizeof(arr[0]);
FILE *fp = fopen("kjvdist.txt","r");
if(fp == NULL){
printf("The File Does not exist, Try Again?\n");
return;
}
char *ptr[num_of_line];
for(int row = 0; row < num_of_line; row++) {
ptr[row] = malloc(size);/*allocate memory */
fgets(ptr[row],sizeof(ptr[row]),fp);
int index = ptr[row];
char asc = ptr[row];
arr[index] = asc; /* do operation here on ptr[row] to get equivalent ASCII code */
for(int col = 0; ptr[row][col] ;col++) {
if(ptr[row][col]>='0' && ptr[row][col]<='9')//check for alphabets & other also
int ascii = ptr[row][col] + 48;
/* something like above you need to do */
}
}
HuffmanCodes(arr, freq, size);
return 0;
}
如果您希望读取的文件不是很大,最简单的解决方案可能是将整个文件读入内存。您可以使用 mmap()
或按照以下方式自己做:
fd = open(filename, O_RDONLY, 0);
fstat(fd, &st);
data = malloc(st.st_size + 1);
read(fd, data, st.st_size);
data[st.st_size] = '[=10=]';
close(fd);
然后在数组 data
中查找换行符(错误检查留作 reader 的练习)。
lineno = 0;
line = data;
while ((nl = strchr(line, '\n') != NULL) {
*nl = '[=11=]';
process(line, ++lineno);
line = nl + 1;
}
我一直致力于创建类似于下面的 Huffman Table。
我想做的是我有一些 C 代码可以翻译一组字母和一组它们的频率,我现在正在尝试读取一个文件并将文件的行号转换为翻译成匹配的 ASCII 码(第 32 行将转换为 ASCII 码 32)并取该行的内容。我是 C 的新手,还没有探索过获取文件,我可以在本质上使用一些技巧。
- 正在加载文件
- 逐行读取文件并将数字内容分配给数组
- 然后抓取 # 行,然后将其转换为匹配的 ASCII 代码。
如果需要,我可以 post 我的代码,但我更困惑于获取文件作为我的输入。
int main(int argc, char* argv[])
{
char arr[127];
int freq[127];
int num_of_line = 127;
int size = sizeof(arr) / sizeof(arr[0]);
FILE *fp = fopen("kjvdist.txt","r");
if(fp == NULL){
printf("The File Does not exist, Try Again?\n");
return;
}
char *ptr[num_of_line];
for(int row = 0; row < num_of_line; row++) {
ptr[row] = malloc(size);/*allocate memory */
fgets(ptr[row],sizeof(ptr[row]),fp);
int index = ptr[row];
char asc = ptr[row];
arr[index] = asc; /* do operation here on ptr[row] to get equivalent ASCII code */
for(int col = 0; ptr[row][col] ;col++) {
if(ptr[row][col]>='0' && ptr[row][col]<='9')//check for alphabets & other also
int ascii = ptr[row][col] + 48;
/* something like above you need to do */
}
}
HuffmanCodes(arr, freq, size);
return 0;
}
如果您希望读取的文件不是很大,最简单的解决方案可能是将整个文件读入内存。您可以使用 mmap()
或按照以下方式自己做:
fd = open(filename, O_RDONLY, 0);
fstat(fd, &st);
data = malloc(st.st_size + 1);
read(fd, data, st.st_size);
data[st.st_size] = '[=10=]';
close(fd);
然后在数组 data
中查找换行符(错误检查留作 reader 的练习)。
lineno = 0;
line = data;
while ((nl = strchr(line, '\n') != NULL) {
*nl = '[=11=]';
process(line, ++lineno);
line = nl + 1;
}