我需要逐个读取存储在文件中的不同值.所以我想我可以ifstream用来打开文件,但由于文件设置的方式是一行可能包含三个数字,另一行一个数字或两个数字我不知道如何读取每个数字逐一.我正在考虑使用,stringstream但我不确定这是否有用.
该文件是这样的格式.
52500.00 64029.50 56000.00
65500.00
53780.00 77300.00
44000.50 80100.20 90000.00 41000.00
60500.50 72000.00
Run Code Online (Sandbox Code Playgroud)
我需要读取每个数字并将其存储在一个vector.
完成此任务的最佳方法是什么?即使每行包含不同数量的数字,也一次读取一个数字?
TStringList不了解BOM吗?
Tf1 := TFileStream.Create(LIGALOG+'liga.log',fmOpenRead or fmShareDenyNone);
str:=tstringlist.Create;
str.LoadFromStream(tf1);
String1:='FStream '+inttostr(tf1.Size)+'/ String: '+(str.Text);
Run Code Online (Sandbox Code Playgroud)
如果文本文件以UTF-8 + BOM保存Str.Count=0; Str.Text=''.没有BOM,一切都还可以.
这是正常的吗?
我一直在尝试将输入字符串拆分为由空格描绘的较小字符串.我在这里找到了这段代码:
stringstream ss ("bla bla");
string s;
while (getline(ss, s, ' ')) {
cout << s << endl;
}
Run Code Online (Sandbox Code Playgroud)
哪个工作得很好.但是,如果我用包含字符串的变量替换"bla bla":
string userInput;
cin >> userInput;
stringstream ss (userInput);
string s;
while (getline(ss, s, ' ')) {
cout << s << endl;
}
Run Code Online (Sandbox Code Playgroud)
只打印出第一个单词/ char/string.这是为什么?有办法解决吗?我已经查看了一些字符串流问题,但问题是我真的不知道我在寻找什么.
使用TStringStream时,bytes使用其Bytes属性与bytes提取的使用不同TStream.Read.如下所示:
bytes使用所提取的TStream.Read表示正确的数据.bytes使用它的Bytes属性包含更多的数据.bytes不同bytes)你能帮忙评论可能的原因吗?非常感谢您的帮助!
PS:Delphi XE,Windows 7.(似乎在Delphi 7中的TStringStream没有LoadFromFile或SaveToFile.)
PS:可以从SkyDrive下载示例文件:REF_EncodedSample和REF_DecodedSample.(Zlib压缩的图像文件.).
procedure CompareBytes_2;
var
ss_1: TStringStream;
ss_2: TStringStream;
sbytes_Read: TBytes;
sbytes_Property: TBytes;
len_sbytes_Read: Integer;
len_sbytes_Property: Integer;
filename: string;
begin
filename := 'REF_EncodedSample'; // textual data
// filename := 'REF_DecodedSample'; // non-textual data
ss_1 := TStringStream.Create;
ss_1.LoadFromFile(filename);
ss_2 := TStringStream.Create;
ss_2.LoadFromFile(filename);
ss_1.SaveToFile(filename+ '_CopyByStringStream_1');
ss_2.SaveToFile(filename+ '_CopyByStringStream_2');
len_sbytes_Read := ss_1.Size;
SetLength(sbytes_Read, len_sbytes_Read); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用stringstreams来获取字符串.我是这样做的:
std::string const DilbertImage::startUrl = "http://tjanster.idg.se/dilbertimages/dil";
std::string const DilbertImage::endUrl = ".gif";
DilbertImage::DilbertImage(int d)
{
cal.setDate(d);
int year, month, date;
year = cal.getYear();
month = cal.getMonth();
date = cal.getNumDate();
std::stringstream ss;
ss << year << "/";
if(month < 10)
{
ss << 0;
}
ss << month << "/" << "Dilbert - " << cal.getNumDate() << ".gif";
filePath = ss.str();
ss.str("");
ss.clear();
ss << startUrl << date << endUrl;
url = ss.str();
std::cout << url << '\t' << filePath << std::endl; …Run Code Online (Sandbox Code Playgroud) 我正在使用此代码将unsigned char*(指向256个值的数组)转换为std :: string:
int ClassA::Func(unsigned char *dataToSend, int sendLength)
{
std::stringstream convertStream;
std::string dataToSendStr = "";
for(int i=0; i<=sendLength; i++) convertStream << dataToSend[i];
while(!convertStream.eof()) convertStream >> dataToSendStr;
...
}
Run Code Online (Sandbox Code Playgroud)
但后来我有这种格式的dataToSendStr:
dataToSendStr ""
[0] 0x00
[1] 0x00
[2] 0x04
[3] 0xC0
Run Code Online (Sandbox Code Playgroud)
如果我现在使用这个值我只得到""而不是重要值[0-3]!
- >需要类似:dataToSendStr"000004C0"
谢谢你的帮助!
考虑以下参数:
char words[8] = "one two";
string word1;
string word2;
stringstream ss;
Run Code Online (Sandbox Code Playgroud)
这段代码的输出:
ss << strtok(words, " ");
ss >> word1;
ss << strtok(NULL, " ");
ss >> word2;
cout << "Words: " << word1 << " " << word2 << endl;
Run Code Online (Sandbox Code Playgroud)
是:
Words: one
Run Code Online (Sandbox Code Playgroud)
而对于这段代码
ss << strtok(words, " ");
ss >> word1;
char* temp = strtok(NULL, " ");
word2 = temp;
cout << "Words: " << word1 << " " << word2 << endl;
Run Code Online (Sandbox Code Playgroud)
输出是:
Words: one two …Run Code Online (Sandbox Code Playgroud) 我有以下代码用于格式化打印输出,总是4位数,包含符号:
std::stringstream pitch;
pitch.precision(0);
pitch.width(4);
pitch.fill('0');
pitch << std::showpos << (int)(m_values["Pitch_1"]);
Run Code Online (Sandbox Code Playgroud)
我还想显示符号("+"/" - "),但我希望它在填充之前,如下所示:
+002
Run Code Online (Sandbox Code Playgroud)
但是,我在这里的代码将"+"符号移动到最高位:
00+2
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我如何更改格式以便我拥有前者而不是后者?
我有两个std::stringstream:ss1和ss2,它们作为两个不同函数的参数给出,这些函数用数据填充它们.
我想要理智地检查这些函数是否写入相同的内容.我如何测试两个相等std::stringstream?
alg1.print(ss1);
alg2.print(ss2);
if(ss1 != ss2) {
cout << "Content not identical!" << endl;
}
Run Code Online (Sandbox Code Playgroud)
不行.将它们转换为str()工作,但这似乎无效.肯定有更好的办法?
给定a stringstream ss,是否有一种巧妙的方法来迭代当前的字符,而不改变其状态?
当然,我可以stringstream ss2(ss.str())然后吃ss2中的字符,但我希望有一种方法可以避免创建那个中间字符串,因为我ss可能包含数百万个字符.
背景:我将一些数据编码到ss,并希望在将CRC写入磁盘文件之前附加CRC.它是用于计算我想要迭代的CRC ss.道德要做的事情可能是在运行中继承stringstream和维护CRC,但这对于我的直接目的来说感觉太麻烦了.