我一直在努力让我的C ++程序从Xcode读取我的.txt文件。 我甚至尝试将.txt文件放在我的Xcode C ++程序的同一目录中,但它不会成功读取它。我试图用文件中的所有核苷酸填充dnaData数组,所以我只需要读一次然后我就可以对该数组进行操作。下面只是处理文件的代码的一部分。整个程序的想法是编写一个程序,读取包含DNA序列的输入文件(dna.txt),以各种方式分析输入,并输出包含各种结果的几个文件。输入文件中的最大核苷酸数(见表1)为50,000。 有什么建议吗?
#include <fstream>
#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
const int MAX_DNA = 50000;
// Global DNA array. Once read from a file, it is
// stored here for any subsequent function to use
char dnaData[MAX_DNA];
int readFromDNAFile(string fileName)
{
int returnValue = 0;
ifstream inStream;
inStream.open(fileName.c_str());
if (inStream.fail())
{
cout << "Input file opening failed.\n";
exit(1);
}
if (inStream.good())
{
char nucleotide;
int counter = 0;
while ( inStream >> nucleotide )
{
dnaData[counter] = nucleotide;
counter++;
}
returnValue = counter;
}
inStream.close();
return returnValue;
cout << "Read file completed" << endl;
} // end of readFromDNAfile function
答案 0 :(得分:4)
我怀疑这里的问题不是C ++代码,而是文件位置。在Xcode中,二进制程序构建在Executables位置。您必须设置构建阶段以将输入文件复制到Executables位置。见Apple Documentation
答案 1 :(得分:0)
我做了类似于你最近尝试使用vector
这样的事情:
vector<string> v;
// Open the file
ifstream myfile("file.txt");
if(myfile.is_open()){
string name;
// Whilst there are lines left in the file
while(getline(myfile, name)){
// Add the name to the vector
v.push_back(name);
}
}
以上内容读取存储在文件每一行的名称,并将它们添加到向量的末尾。因此,如果我的文件是5个名字,则会发生以下情况:
// Start of file
Name1 // Becomes added to index 0 in the vector
Name2 // Becomes added to index 1 in the vector
Name3 // Becomes added to index 2 in the vector
Name4 // Becomes added to index 3 in the vector
Name5 // Becomes added to index 4 in the vector
// End of file
试试看看它是如何运作的。
即使你不采用上面显示的方式,我仍然建议使用std::vector,因为向量通常更容易使用,并且没有理由不在这种情况下。
答案 2 :(得分:0)
如果每行包含一个字符,那么这意味着您还在读取DNA数组中的行尾字符('\ n')。在这种情况下,您可以:
while ( inStream >> nucleotide )
{
if(nucleotide == '\n')
{
continue;
}
dnaData[counter] = nucleotide;
counter++;
}