Hi(gh)!
I'm not sure whether I'm right in this group... but as it is not
possible to read in text line-wise from a file using #read (unless it is
specially formatted) I wrote a small C++ program which generates a
string array definition from any given ASCII text file... feel free to
use it!
// beginning of code
// ascii2povarray
// A utility to produce PoV-Ray string array definition code from any
ASCII text file
http://www.khyberspace.de)
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
ifstream ascii;
string ascii_name;
string line;
unsigned int i;
cout << "ASCII file name: ";
cin >> ascii_name;
ascii.open(ascii_name.c_str());
if (!ascii)
{
cerr << ascii_name << " cannot be opened!\n";
exit (-1);
}
char ch;
vector<char> buffer;
vector<string> code;
unsigned int lines=0;
while (ascii.get(ch))
{
buffer.push_back(ch);
if (ch == '\n')
{
i=0;
while (i<buffer.size()-1)
{
// cout << "Hallo!" << endl;
if (buffer.at(i)=='"')
line.append("\\\"");
else
line.push_back(buffer.at(i));
i++;
}
code.push_back(line);
buffer.clear();
lines++;
}
line.clear();
};
ascii.close();
ofstream povcode;
string povcode_name;
cout << "PoV-Ray script? ";
cin >> povcode_name;
povcode.open(povcode_name.c_str());
if (!povcode)
{
cerr << povcode_name << " cannot be opened!\n";
exit (-1);
}
povcode << "// INCLUDE FILE GENERATED WITH ASCII2POVARRAY" << endl;
povcode << endl;
povcode_name = povcode_name.erase(povcode_name.size()-4,
povcode_name.size());
povcode << "#declare " << povcode_name << "_array = array[" << lines
<< "]" << endl;
povcode << "{" << endl;
for (unsigned int i=0; i<lines; i++)
{
if (i==lines-1)
povcode << " \"" << code[i] << "\"" << endl;
else
povcode << " \"" << code[i] << "\"," << endl;
}
povcode << "};" << endl;
return 0;
}
// end of code
See you in Khyberspace!
Yadgar
Post a reply to this message
|