首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取以C++结尾的不同行的文件

如何读取以C++结尾的不同行的文件
EN

Stack Overflow用户
提问于 2022-01-21 06:34:46
回答 1查看 378关注 0票数 0

我有两个文件"linuxUTF8.srt“和"macANSI.srt”。我正在使用getline()读取这些文件。由于macANSI.srt以'\r‘作为行的结尾,所以我读取的是整个文件,而不是一行。我知道我必须将'\r‘作为分隔符传递,但是如何知道我所处理的行结束字符的类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-21 12:19:51

正如塞巴斯蒂安所说,我们需要阅读这个块,然后找出合适的行尾。

因此,我们需要以二进制模式打开文件并读取最后的字符。

代码语言:javascript
复制
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
void SetLineEnding(char *filename, std::string &newline, char &delimiter)
{
    std::string str;
    std::ifstream chk(filename,std::ios::binary);
    if(getline(chk, str))
    {
        if(str.size() && str[str.size()-1] == '\r') 
        {
            //It can be either \r or \r\n
            if(getline(chk, str))
            {
                delimiter = '\n';
                newline = "\\r\\n";
            }
            else
            {
                delimiter = '\r';
                newline = "\\r";
            }
        }
        else 
        {
            delimiter = '\n';
            newline = "\\n";
        }
    }
}
int32_t main()
{
    
    string newLine;
    string delimiter;
    char filename[256];
    in>>filename;
    SetLineEnding(filename,newLine,delimiter);
    std::ifstream inp(filename,ios::in);
    if(!inp.is_open())
    {
        cout<<"File not opened"<<endl;
        return 0;
    }
    //getline() function with delimiter
    string str;
    getline(inp,str,delimiter);
    
    return 0;
}

现在,您可以将分隔符传递给getline(),并且可以根据行尾进行读取。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70797294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档