C从竖线字符分隔的文件中读取
C reading in from a vertical line character delimited file
C新手,正在尝试读取用竖线'|'字符分隔的文本文件"stocks"。目的是打开文件,该文件每行都有一个字符串和浮点值,格式为:
TOM|149.62
JIM|23.25
我读过其他关于逗号、冒号和制表符分隔文件的文章,但这里作为%s
和%f
之间的[^|]
应用的"扫描集"建议似乎不起作用。我似乎至少现在已经设法存储了字符串的第一个字符,但保存的浮点值是无稽之谈。稍后将写入文件后声明的数组,但显示每行的字符串和浮点值的基本情况意味着我可以自己继续。感谢你能给我的任何帮助。
#include <iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
// TOM|149.62
// JIM|23.25
int main()
{
FILE *stocks;
char *stock_Tickers[100];
float stock_Prices[100];
if ((stocks = fopen("Stocks.txt", "r")) == NULL)
{
fprintf(stderr, "Error opening file.n");
exit(1);
}
char tempchar;
float tempfloat;
for (int i = 0; i < sizeof (stock_Tickers); i++)
{
if (feof(stocks))
{
break;
}
fscanf(stocks, "%s[^|]%fn",&tempchar,&tempfloat);
cout << tempchar << " " << tempfloat;
cin.get();
}
return 0;
}
更新:@Michel Billaud道歉,但我还有最后一个错误。你的方法运行得很好,但当我在这个轻微的变体上尝试它时,它开始在最后一个浮点上打印垃圾,并在随后的循环中中断。查看了局部变量,最后一个数组没有更新。我认为这与新行有关,因为当我将浮点值更改为整数时,它仍然不起作用。你能看到我可能做错了什么吗,因为它对我来说似乎是一样的格式吗?本次格式为Ryan|B|IBM|100|176.10
。在此之后将读入所有文件。。。谢谢
FILE *trades;
// Ryan|B|IBM|100|176.10
// Ryan|S|IBM|50|177.10
char trade_User[100][20];
char trade_Type[100];
char trade_Tickers[100][4];
int trade_Quantity[100];
float trade_Prices[100];
int trade_Count = 0;
if ((trades = fopen("Trades.txt","r")) == NULL)
{
fprintf(stderr, "Error opening file.n");
exit(1);
}
for (int i = 0; i < sizeof(trade_Tickers); i++)
{
if (feof(trades))
{
break;
}
fscanf(trades, "%19[^|]|%1[^|]|%4[^|]|%d[^|]|%fn",
&trade_User[i], &trade_Type[i], &trade_Tickers[i], &trade_Quantity[i], &trade_Prices[i]);
printf("%s %c %s %d %fn",
trade_User[i], trade_Type[i], trade_Tickers[i], trade_Quantity[i], trade_Prices[i]);
trade_Count++;
}
提示:当尝试使用有问题的功能时,请在一个单独的小程序中进行。所以你不会因为另一个无关的问题而冒险得出错误的结论。
// just playing with |-separated fields
#include <stdio.h>
int main(int argc, char **argv)
{
char line[]="TOM|1234.56";
char name[20];
float value;
sscanf(line, "%[^|]|%f", name, &value);
printf("name = %s, value = %fn", name, value);
return 0;
}
顺便说一句:你似乎在使用C++编译器(因为"使用命名空间std"(。
相关文章:
- 正在将csv文件读取为双精度矢量
- 将从格式化文本文件读取的文本数据存储到链表
- C++ 读取文件读取文件不正确
- 使用对象文件读取三角形数据网格
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 从文件读取,并写入函数C++中的数组
- 从对象C++中的文件读取内容时出现分段错误
- 从文件读取并通过矢量输出到控制台
- 尝试将字符串从文件读取到无符号字符向量中
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 简化文件读取的函数
- 如何将逗号分隔的文件读取为 2D int 数组?
- 在 c++ 中将数据从文件读取到队列中
- 'std::wstring_convert'尽可能多地转换(从 UTF8 文件读取块)
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 文件读取C++包括空格键
- 从文件读取时未将值推回矢量
- 从文件 C++ 读取时的无限循环
- 从同一文件读取和写入?
- 从.txt文件读取到C++中的双精度向量