[英]Reading an input file and ignoring blank lines or lines starting with # in C
[英]Reading a text file and ignoring commented lines in C
我目前正在用C語言制作一台微型計算機以進行編程任務,但我只停留在一部分上。
我一直在研究如何正確忽略正在閱讀的文本文件中的注釋。(下面的文件輸入示例)。
Input File
5 5 //IN 5
6 7 //OUT 7
3 0 //STORE 0
5 5 //IN 5
6 7 //OUT 7
3 1 //STORE 1
1 0 //LOAD 0
4 1 //SUB 1
3 0 //STORE 0
6 7 //OUT 7
1 1 //LOAD 1
6 7 //OUT 7
7 0 //END
每條新行的第一個輸入是一個操作,第二個輸入是一個地址。 我計划為每個操作准備一個switch語句,然后調用適當的函數。 這是我當前讀取文件的布局:
//file handling
int c;
FILE * file;
file = fopen(name, "r");
if (file){
printf("Run.\n");
while ((c = getc(file)) != EOF){
op = c;
switch (op){
case 5:
print("Inside case 5\n");
}
}
fclose(file);
}
如何忽略每行// //並跳至文件的下一行?
致電fgets以獲取完整行:
fgets(buffer, 100, file);
然后從該行中提取兩個數字:
sscanf(buffer, "%d%d", &instruction, &address);
如何正確忽略正在閱讀的文本文件中的注釋
如何忽略每行// //並跳至文件的下一行?
使用fgets()
閱讀該行
char buf[80];
if (fgets(buf, sizeof buf, file)) {
使用strstr()
@Steve Summit查找//
,然后在該位置斷開字符串。
char *slash_slash = strstr(buf, "//");
if (slash_slash) {
*slash_slash = '\0';
}
根據需要繼續處理生產線。
...
}
通過使用fgets
和strtok
您可以逐行閱讀並根據//
分隔符分割字符串。 這是一個示例(尚未完全檢查,但這是主要思想):
FILE *f = fopen("file.txt", "r");
if (f== NULL)
{
printf("opening file failed\n");
return 1;
}
char buf[256] = { 0 };
while (fgets(buf, 256, f))
{
char *s = strtok(buf, "//");
if (s == NULL)
{
printf("s == NULL\n");
}
else
{
printf("%s\n", s);
}
memset(buf, 0, 256);
}
fclose(f);
編輯:我只是意識到這不是您想要的。 但是,您仍然可以使用它來首先忽略注釋,然后將給定的字符串分成操作和地址,或其他任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.