//main.c
#include <stdio.h>
#include <stdlib.h>
#include "functions.h"
int main(int argc, char** argv){
FILE* pfile = NULL;
FILE* csvpfile = NULL;
char* csvFileName;
if (argc != 2){
printf ("File name error! Enter full path!\n"); exit (INPUT_FILE_NAME_ERROR
); }
pfile = fileOpen(argv [1]);
csvFileName = csvCreateFileName (argv [1]);
csvpfile
= fopen (csvFileName
, "w");
textToCSVConverter(pfile, csvpfile);
return EXIT_STATUS_OK;
}
//functions.c
#include "functions.h"
FILE* fileOpen(char* filePath){
FILE* pfile = NULL;
if ((pfile
= fopen(filePath
, "r")) == NULL
){ printf ("Error opening file!\n"); exit (FILE_OPEN_ERROR
);//Could not open stream }
return pfile;
}
FILE* fileCreate(char* filePath){
FILE* pfile = NULL;
if ((pfile
= fopen(filePath
, "w")) == NULL
){ printf ("Error creating file!\n"); exit (FILE_CREATE_ERROR
);//Could not create stream }
return pfile;
}
void textToCSVConverter (FILE* txtpfile, FILE* csvpfile){
char tmpChar;
unsigned short int check = 0;
while ((tmpChar
= fgetc (txtpfile
)) != EOF
){ if ((char) tmpChar == ';'){
fwrite (&tmpChar
, 1, 1, csvpfile
); }
if (!(check
= fwrite (&tmpChar
, 1, 1, csvpfile
))) printf ("No byte written!\n"); }
}
char* csvCreateFileName (char* FileName){
size_t pathLen
= strlen (FileName
); char fileExt [4] = {'c', 's', 'v', '\0'};
unsigned short int i, j;
printf ("TXT File Name: %s\n", FileName
); for (i = pathLen - 3, j = 0; i < pathLen; i++, j++)
FileName [i] = fileExt [j];
printf ("CSV File Name: %s\n", FileName
);
return FileName;
}
//functions.h
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFFER 128
#define INPUT_FILE_NAME_ERROR -3
#define FILE_OPEN_ERROR -2
#define FILE_CREATE_ERROR -1
#define EXIT_STATUS_OK 0
FILE* fileOpen (char* filePath);
FILE* fileCreate (char* filePath);
void textToCSVConverter (FILE* txtpfile, FILE* csvpfile);
char* csvCreateFileName (char* txtFileName);
Ly9tYWluLmMKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KXsKICAgIEZJTEUqIHBmaWxlID0gTlVMTDsKICAgIEZJTEUqIGNzdnBmaWxlID0gTlVMTDsKICAgIGNoYXIqIGNzdkZpbGVOYW1lOwoKICAgIGlmIChhcmdjICE9IDIpewogICAgICBwcmludGYgKCJGaWxlIG5hbWUgZXJyb3IhIEVudGVyIGZ1bGwgcGF0aCFcbiIpOwogICAgICBleGl0IChJTlBVVF9GSUxFX05BTUVfRVJST1IpOwogICAgfQoKICAgIHBmaWxlID0gZmlsZU9wZW4oYXJndiBbMV0pOwogICAgY3N2RmlsZU5hbWUgPSBjc3ZDcmVhdGVGaWxlTmFtZSAoYXJndiBbMV0pOwogICAgY3N2cGZpbGUgPSBmb3BlbiAoY3N2RmlsZU5hbWUsICJ3Iik7CgogICAgdGV4dFRvQ1NWQ29udmVydGVyKHBmaWxlLCBjc3ZwZmlsZSk7CgogICAgZmNsb3NlIChwZmlsZSk7CiAgICBmY2xvc2UgKGNzdnBmaWxlKTsKICAgIHJldHVybiBFWElUX1NUQVRVU19PSzsKfQoKCi8vZnVuY3Rpb25zLmMKI2luY2x1ZGUgImZ1bmN0aW9ucy5oIgoKRklMRSogZmlsZU9wZW4oY2hhciogZmlsZVBhdGgpewogIEZJTEUqIHBmaWxlID0gTlVMTDsKICBpZiAoKHBmaWxlID0gZm9wZW4oZmlsZVBhdGgsICJyIikpID09IE5VTEwpewogICAgcHJpbnRmICgiRXJyb3Igb3BlbmluZyBmaWxlIVxuIik7CiAgICBleGl0IChGSUxFX09QRU5fRVJST1IpOy8vQ291bGQgbm90IG9wZW4gc3RyZWFtCiAgfQogIHJldHVybiBwZmlsZTsKfQoKRklMRSogZmlsZUNyZWF0ZShjaGFyKiBmaWxlUGF0aCl7CiAgRklMRSogcGZpbGUgPSBOVUxMOwogIGlmICgocGZpbGUgPSBmb3BlbihmaWxlUGF0aCwgInciKSkgPT0gTlVMTCl7CiAgICBwcmludGYgKCJFcnJvciBjcmVhdGluZyBmaWxlIVxuIik7CiAgICBleGl0IChGSUxFX0NSRUFURV9FUlJPUik7Ly9Db3VsZCBub3QgY3JlYXRlIHN0cmVhbQogIH0KICByZXR1cm4gcGZpbGU7Cn0KCnZvaWQgdGV4dFRvQ1NWQ29udmVydGVyIChGSUxFKiB0eHRwZmlsZSwgRklMRSogY3N2cGZpbGUpewogIGNoYXIgdG1wQ2hhcjsKICB1bnNpZ25lZCBzaG9ydCBpbnQgY2hlY2sgPSAwOwoKICB3aGlsZSAoKHRtcENoYXIgPSBmZ2V0YyAodHh0cGZpbGUpKSAhPSBFT0YpewogICAgaWYgKChjaGFyKSB0bXBDaGFyID09ICc7Jyl7CiAgICAgIHN0cmNweSgmdG1wQ2hhciwgIiwiKTsKICAgICAgZndyaXRlICgmdG1wQ2hhciwgMSwgMSwgY3N2cGZpbGUpOwogICAgICBwdXRjKHRtcENoYXIsIHN0ZG91dCk7CiAgICB9CiAgICBpZiAoIShjaGVjayA9IGZ3cml0ZSAoJnRtcENoYXIsIDEsIDEsIGNzdnBmaWxlKSkpCiAgICAgIHByaW50ZiAoIk5vIGJ5dGUgd3JpdHRlbiFcbiIpOwogIH0KfQoKY2hhciogY3N2Q3JlYXRlRmlsZU5hbWUgKGNoYXIqIEZpbGVOYW1lKXsKICBzaXplX3QgcGF0aExlbiA9IHN0cmxlbiAoRmlsZU5hbWUpOwogIGNoYXIgZmlsZUV4dCBbNF0gPSB7J2MnLCAncycsICd2JywgJ1wwJ307CiAgdW5zaWduZWQgc2hvcnQgaW50IGksIGo7CgogIHByaW50ZiAoIlRYVCBGaWxlIE5hbWU6ICVzXG4iLCBGaWxlTmFtZSk7CiAgZm9yIChpID0gcGF0aExlbiAtIDMsIGogPSAwOyBpIDwgcGF0aExlbjsgaSsrLCBqKyspCiAgICBGaWxlTmFtZSBbaV0gPSBmaWxlRXh0IFtqXTsKICBwcmludGYgKCJDU1YgRmlsZSBOYW1lOiAlc1xuIiwgRmlsZU5hbWUpOwoKICByZXR1cm4gRmlsZU5hbWU7Cn0KCi8vZnVuY3Rpb25zLmgKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKI2RlZmluZSBCVUZGRVIgMTI4CgojZGVmaW5lIElOUFVUX0ZJTEVfTkFNRV9FUlJPUiAtMwojZGVmaW5lIEZJTEVfT1BFTl9FUlJPUiAgICAgICAtMgojZGVmaW5lIEZJTEVfQ1JFQVRFX0VSUk9SICAgICAtMQojZGVmaW5lIEVYSVRfU1RBVFVTX09LICAgICAgICAgMAoKRklMRSogZmlsZU9wZW4gICAgICAgICAgICAgICAgKGNoYXIqIGZpbGVQYXRoKTsKRklMRSogZmlsZUNyZWF0ZSAgICAgICAgICAgICAgKGNoYXIqIGZpbGVQYXRoKTsKdm9pZCAgdGV4dFRvQ1NWQ29udmVydGVyICAgICAgKEZJTEUqIHR4dHBmaWxlLCBGSUxFKiBjc3ZwZmlsZSk7CmNoYXIqIGNzdkNyZWF0ZUZpbGVOYW1lICAgICAgIChjaGFyKiB0eHRGaWxlTmFtZSk7