gpt4 book ai didi

c++ - 写入文件时将双点转换为逗号

转载 作者:行者123 更新时间:2023-11-30 02:01:27 25 4
gpt4 key购买 nike

我正在开发一个小型导出函数,我需要编写 100 万行代码,其中包含 6x doubles。不幸的是,读取数据的工具要求将点替换为逗号。我现在转换它们的方法是在编辑器中手动替换,这对于大约 20MB 的文件来说很麻烦并且非常慢。

有没有办法在编写时进行这种转换?

最佳答案

使用像 tr 这样的工具会比手动操作更好,并且应该是您的首选。否则,这很简单通过过滤 streambuf 输入,它转换所有 '.'',',甚至仅在特定上下文中转换(当例如,前面或后面的字符是一个数字)。没有上下文:

class DotsToCommaStreambuf : public std::streambuf
{
std::streambuf* mySource;
std::istream* myOwner;
char myBuffer;
protected:
int underflow()
{
int ch = mySource->sbumpc();
if ( ch != traits_type::eof() ) {
myBuffer = ch == '.' ? ',' : ch;
setg( &myBuffer, &myBuffer, &myBuffer + 1 );
}
}
public:
DotsToCommaStreambuf( std::streambuf* source )
: mySource( source )
, myOwner( NULL )
{
}
DotsToCommaStreambuf( std::istream& stream )
: mySource( stream.rdbuf() )
, myOwner( &stream )
{
myOwner->rdbuf( this );
}
~DotsToCommaStreambuf()
{
if ( myOwner != NULL ) {
myOwner.rdbuf( mySource );
}
}
}

用这个类包装你的输入源:

DotsToCommaStreambuf s( myInput );

只要 s 在范围内,myInput 就会转换所有 '.'它在 ',' 的输入中看到。

编辑:

我已经看到您希望发生更改的评论在生成文件时,而不是在读取文件时。这原理是一样的,只是过滤streambuf有ostream 所有者,并覆盖 overflow( int ),而不是下溢。在输出时,您不需要本地缓冲区,所以更简单:

int overflow( int ch )
{
return myDest->sputc( ch == '.' ? ',' : ch );
}

关于c++ - 写入文件时将双点转换为逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14083177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com