C++/File/File Utility
Содержание
- 1 Concatenate files
- 2 Copy a file and display number of chars copied.
- 3 Copy a file and reverse case of letters.
- 4 Copy a file and reverse case of letters with error checking.
- 5 Copy and convert tabs to spaces.
- 6 Copy a text file and display number of chars copied.
- 7 Copy files
- 8 Count letters.
- 9 Create a file comparision utility.
- 10 Display contents of specified file in both ASCII and in hex.
- 11 Read and display a text file line by line.
- 12 Search file.
- 13 Swap characters in a file.
- 14 Swap characters in a file with error checking.
- 15 Word count for input file: file read with ifstream
Concatenate files
#include <iostream>
#include <fstream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::getline;
using std::ifstream;
using std::string;
int main(int argc, char **argv)
{
int fail_count = 0;
for (int i = 1; i < argc; ++i) {
ifstream in(argv[i]);
if (in) {
string s;
while (getline(in, s))
cout << s << endl;
} else {
cerr << "cannot open file " << argv[i] << endl;
++fail_count;
}
}
return fail_count;
}
Copy a file and display number of chars copied.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if(argc!=3) {
cout << "Usage: CPY <input> <output>\n";
return 1;
}
ifstream fin(argv[1], ios::in | ios::binary); // open input file
ofstream fout(argv[2], ios::out | ios::binary); // create output file
if(!fin) {
cout << "Cannot open input file\n";
return 1;
}
if(!fout) {
cout << "Cannot open output file\n";
return 1;
}
char ch;
unsigned count=0;
while(!fin.eof()) {
fin.get(ch);
if(!fin.eof()) {
fout.put(ch);
count++;
}
}
cout << "Number of bytes copied: " << count << "\n";
fin.close();
fout.close();
return 0;
}
Copy a file and reverse case of letters.
#include <iostream>
#include <fstream>
#include <cctype>
using namespace std;
int main(int argc, char *argv[])
{
char ch;
if(argc!=3) {
cout << "Usage: COPYREV <source> <target>\n";
return 1;
}
ifstream in(argv[1]);
if(!in) {
cout << "Cannot open input file.\n";
return 1;
}
ofstream out(argv[2]);
if(!out) {
cout << "Cannot open output file.\n";
return 1;
}
while(!in.eof()) {
ch = in.get();
if(!in.eof()) {
if(islower(ch)) ch = toupper(ch);
else ch = tolower(ch);
out.put(ch);
}
};
in.close();
out.close();
return 0;
}
Copy a file and reverse case of letters with error checking.
#include <iostream>
#include <fstream>
#include <cctype>
using namespace std;
int main(int argc, char *argv[])
{
char ch;
if(argc!=3) {
cout << "Usage: COPYREV <source> <target>\n";
return 1;
}
ifstream in(argv[1]);
if(!in) {
cout << "Cannot open input file.\n";
return 1;
}
ofstream out(argv[2]);
if(!out) {
cout << "Cannot open output file";
return 1;
}
while(!in.eof()) {
ch = in.get();
if(!in.good() && !in.eof())
return 1;
if(!in.eof()) {
if(islower(ch))
ch = toupper(ch);
else
ch = tolower(ch);
out.put(ch);
if(!out.good())
return 1;
}
};
in.close();
out.close();
if(!in.good() && !out.good())
return 1;
return 0;
}
Copy and convert tabs to spaces.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if(argc!=3) {
cout << "Usage: CPY <in> <out>\n";
return 1;
}
ifstream in(argv[1]);
if(!in) {
cout << "Cannot open input file.\n";
return 1;
}
ofstream out(argv[2]);
if(!out) {
cout << "Cannot open output file.\n";
return 1;
}
char ch;
int i = 8;
while(!in.eof()) {
in.get(ch);
if(ch=="\t")
for( ; i>0; i--)
out.put(" ");
else out.put(ch);
if(i == -1 || ch=="\n") i = 8;
i--;
}
in.close();
out.close();
return 0;
}
Copy a text file and display number of chars copied.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if(argc!=3) {
cout << "Usage: Copy <input> <output>\n";
return 1;
}
ifstream fin(argv[1]); // open input file
ofstream fout(argv[2]); // create output file
if(!fin) {
cout << "Cannot open input file.\n";
return 1;
}
if(!fout) {
cout << "Cannot open output file.\n";
return 1;
}
char ch;
unsigned count=0;
fin.unsetf(ios::skipws); // do not skip spaces
while(!fin.eof()) {
fin >> ch;
if(!fin.eof()) {
fout << ch;
count++;
}
}
cout << "Number of bytes copied: " << count << "\n";
fin.close();
fout.close();
return 0;
}
Copy files
#include <iostream>
#include <stdlib.h>
#include <fstream>
using namespace std;
int main(int argc, char **argv)
{
char buffer[1];
ifstream input(argv[1], ios::in);
if (input.fail())
{
cout << "Error opening the file " << argv[1];
exit(1);
}
ofstream output(argv[2], ios::out);
if (output.fail())
{
cout << "Error opening the file " << argv[2];
exit(1);
}
do {
input.read(buffer, sizeof(buffer));
if (input.good())
output.write(buffer, sizeof(buffer));
} while (! input.eof());
input.close();
output.close();
}
Count letters.
#include <iostream>
#include <fstream>
#include <cctype>
using namespace std;
int alpha[26];
int main(int argc, char *argv[])
{
char ch;
if(argc!=2) {
cout << "Usage: COUNT <source>\n";
return 1;
}
ifstream in(argv[1]);
if(!in) {
cout << "Cannot open input file.\n";
return 1;
}
// init alpha[]
int i;
for(i = 0; i <26; i++) alpha[ i ] = 0;
while(!in.eof()) {
ch = in.get();
if(isalpha(ch)) {
ch = toupper(ch);
alpha[ch-"A"]++;
}
};
for(i = 0; i <26; i++) {
cout << (char) ("A"+ i) << ": " << alpha[ i ] << "\n";
}
in.close();
return 0;
}
Create a file comparision utility.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
register int i;
int numread;
unsigned char buffer1[1024], buffer2[1024];
if(argc!=3) {
cout << "Usage: compfiles <file1> <file2>\n";
return 1;
}
ifstream f1(argv[1], ios::in | ios::binary);
if(!f1) {
cout << "Cannot open first file.\n";
return 1;
}
ifstream f2(argv[2], ios::in | ios::binary);
if(!f2) {
cout << "Cannot open second file.\n";
return 1;
}
cout << "Comparing files...\n";
do {
f1.read((char *) buffer1, sizeof buffer1);
f2.read((char *) buffer2, sizeof buffer2);
if(f1.gcount() != f2.gcount()) {
cout << "Files are of differing sizes.\n";
f1.close();
f2.close();
return 0;
}
for(i = 0; i <f1.gcount(); i++) // compare contents of buffers
if(buffer1[i] != buffer2[i]) {
cout << "Files differ.\n";
f1.close();
f2.close();
return 0;
}
} while(!f1.eof() && !f2.eof());
cout << "Files are the same.\n";
f1.close();
f2.close();
return 0;
}
Display contents of specified file in both ASCII and in hex.
#include <iostream>
#include <fstream>
#include <cctype>
#include <iomanip>
using namespace std;
int main(int argc, char *argv[])
{
if(argc != 2) {
cout << "Usage: Display <filename>\n";
return 1;
}
ifstream in(argv[ 1 ], ios::in | ios::binary);
if(!in) {
cout << "Cannot open input file.\n";
return 1;
}
register int i, j;
int count = 0;
char c[16];
cout.setf(ios::uppercase);
while(!in.eof()) {
for(i = 0; i < 16 && !in.eof(); i++) {
in.get(c[i]);
}
if(i <16)
i--; // get rid of eof
for(j = 0; j < i; j++)
cout << setw(3) << hex << (int) c[j];
for(; j < 16; j++)
cout << " ";
cout << "\t";
for(j = 0; j < i; j++)
if(isprint(c[ j ]))
cout << c[ j ];
else
cout << ".";
cout << endl;
count++;
if(count == 16) {
count = 0;
cout << "Press ENTER to continue: ";
cin.get();
cout << endl;
}
}
in.close();
return 0;
}
Read and display a text file line by line.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if(argc != 2) {
cout << "Usage: Display <filename>\n";
return 1;
}
ifstream in(argv[ 1 ]); // input
if(!in) {
cout << "Cannot open input file.\n";
return 1;
}
char str[ 255 ];
while(in) {
in.getline(str, 255); // delim defaults to "\n"
if(in)
cout << str << endl;
}
in.close();
return 0;
}
Search file.
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main(int argc, char *argv[])
{
if(argc!=3) {
cout << "Usage: SEARCH <file> <word>\n";
return 1;
}
ifstream in(argv[1]);
if(!in) {
cout << "Cannot open input file.\n";
return 1;
}
char str[255];
int count=0;
while(!in.eof()) {
in >> str;
if(!strcmp(str, argv[2])) count++;
}
cout << argv[2] << " found " << count;
cout << " number of times.\n";
in.close();
return 0;
}
Swap characters in a file.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if(argc!=2) {
cout << "usage: SWAP <filename>\n";
return 1;
}
// open file for input/output
fstream io(argv[1], ios::in | ios::out | ios::binary);
if(!io) {
cout << "Cannot open file.\n";
return 1;
}
char ch1, ch2;
long i;
for(i = 0 ; !io.eof(); i+=2) {
io.seekg(i, ios::beg);
io.get(ch1);
if(io.eof()) continue;
io.get(ch2);
if(io.eof()) continue;
io.seekg(i, ios::beg);
io.put(ch2);
io.put(ch1);
}
io.close();
return 0;
}
Swap characters in a file with error checking.
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if(argc!=2) {
cout << "usage: SWAP <filename>\n";
return 1;
}
// open file for input/output
fstream io(argv[1], ios::in | ios::out | ios::binary);
if(!io) {
cout << "Cannot open file.\n";
return 1;
}
char ch1, ch2;
long i;
for(i = 0 ;!io.eof(); i+=2) {
io.seekg(i, ios::beg);
if(!io.good())
return 1;
io.get(ch1);
if(io.eof())
continue;
io.get(ch2);
if(!io.good())
return 1;
if(io.eof())
continue;
io.seekg(i, ios::beg);
if(!io.good())
return 1;
io.put(ch2);
if(!io.good())
return 1;
io.put(ch1);
if(!io.good())
return 1;
}
io.close();
if(!io.good()) return 1;
return 0;
}
Word count for input file: file read with ifstream
#include <iostream>
#include <fstream>
#include <cctype>
using namespace std;
int main(int argc, char *argv[])
{
if(argc!=2) {
cout << "Usage: COUNT <input>\n";
return 1;
}
ifstream in(argv[1]);
if(!in) {
cout << "Cannot open input file.\n";
return 1;
}
int count=0;
char ch;
in >> ch; // find first non-space char
// after first non-space found, do not skip spaces
in.unsetf(ios::skipws);
while(!in.eof()) {
in >> ch;
if(isspace(ch)) {
count++;
while(isspace(ch) && !in.eof())
in >> ch; // find next word
}
}
cout << "Word count: " << count << "\n";
in.close();
return 0;
}