· 6 years ago · Oct 22, 2019, 09:30 AM
1#include <string.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <time.h>
5#include <stdint.h>
6#include "random.h"
7
8/*
9 (WIP) The goal of the "File Generation" program is to
10 generate CSV or Excel files and populate them with fake
11 testing data, like names, phone numbers, date of births,
12 email addresses, etc.
13*/
14
15/*
16 The `writeToFile()` function creates strings that represent fake 'people' -- that is, fake names, emails, and phone numbers -- and appends the data to a csv format.
17
18 @param char *filename: A string pointer representing the csv to write to.
19
20 @param uint32_t count: An integer representing the amount of 'people' to create.
21*/
22int writeToFile(char *filename, uint32_t count)
23{
24 char *names[] = {
25 "Aaron", "Adaline", "Adam", "Adelle", "Adena", "Alethea", "Alethia", "Alex", "Alexander", "Alfredia", "Ali", "Alleen", "Allegra", "Allen", "Allena", "Alline", "Allyn", "Almeta", "Alona", "Altha", "Alvera", "Alverta", "Alysa", "Angila", "Angla", "Angle", "Anika", "Anisa", "Anisha", "Annett", "Annice", "Annika", "Annis", "Annita", "Anthony", "Antonetta", "Antonietta", "Antonina", "Antonio", "Anya", "Apolonia", "Apryl", "Ara", "Aracelis", "Arcelia", "Ardath", "Ardelia", "Ardell", "Armanda", "Armandina", "Arminda", "Arnetta", "Arnette", "Arnita", "Arthur", "Arvilla", "Ashanti", "Ashlea", "Ashli", "Ashlyn", "Aundrea", "Aurore", "Austin", "Avelina", "Avery", "Avril", "Ayako", "Ayana", "Ayanna", "Ayesha", "Azalee", "Azucena", "Azzie", "Babara", "Babette", "Bao", "Barabara", "Barbar", "Barbera", "Barbie", "Bari", "Barrie", "Basilia", "Beata", "Beatris", "Beaulah", "Bebe", "Becki", "Beckie", "Bernardine", "Berneice", "Bernetta", "Bernie", "Birgit", "Blake", "Blondell", "Blossom", "Brett", "Brian", "Brigid", "Brigida", "Brinda", "Britany", "Britni", "Britt", "Britta", "Cammie", "Cammy", "Cyndy", "Cyrstal", "Cythia", "Dacia", "Dagmar", "Domonique", "Donald", "Donella", "Donetta", "Donette", "Nisha", "Nobuko", "Noella", "Nohemi", "Numbers", "Nyla", "Obdulia", "Oda", "Odelia", "Odilia", "Olene", "Olevia", "Olimpia", "Olinda", "Tomiko", "Tommye", "Tomoko", "Zetta", "Zita", "Zofia", "Zonia", "Zulema", "Zulma" "Aaron", "Abe", "Abel", "Abraham", "Abram", "Adalberto", "Adam", "Adan", "Adolfo", "Adolph", "Adrian", "Agustin", "Al", "Alan", "Albert", "Alberto", "Alejandro", "Alex", "Alexander", "Alexis", "Alfonso", "Alfonzo", "Alfred", "Alfredo", "Amado", "Ambrose", "Amos", "Anderson", "Andre", "Anthony", "Antione", "Bernardo", "Bernie", "Berry", "Bert", "Bertram", "Bill", "Billie", "Billy", "Blaine", "Blair", "Blake", "Bo", "Bob", "Bobbie", "Bobby", "Booker", "Boris", "Boyce", "Boyd", "Brad", "Bradford", "Bradley", "Bradly", "Brady", "Brain", "Branden", "Brandon", "Brant", "Brendan", "Bryce", "Bryon", "Buck", "Bud", "Buddy", "Buford", "Burl", "Burt", "Burton", "Buster", "Byron", "Caleb", "Calvin", "Cameron", "Carey", "Carl", "Carlo", "Carlos", "Carlton", "Carmelo", "Carmen", "Chad", "Chadwick", "Chance", "Chang", "Charles", "Charley", "Charlie", "Chas", "Colin", "Cornell", "Cortez", "Cory", "Courtney", "Coy", "Craig", "Cristobal", "Cristopher", "Cruz", "Curt", "Curtis", "Cyril", "Cyrus", "Dale", "Dallas", "Dalton", "Damian", "Damien", "Danny", "Darnell", "Daron", "Darrel", "Darrell", "Darren", "Darrick", "Darrin", "Darron", "Darryl", "Delmar", "Delmer", "Demarcus", "Demetrius", "Denis", "Dennis", "Denny", "Denver", "Devon", "Dewayne", "Dewey", "Dewitt", "Dexter", "Dick", "Diego", "Dillon", "Dino", "Dion", "Dirk", "Domenic", "Domingo", "Dominic", "Dominick", "Dominique", "Don", "Donald", "Dong", "Donn", "Donnell", "Donnie", "Donny", "Donovan", "Donte", "Dudley", "Duncan", "Dustin", "Dusty", "Dwain", "Dwayne", "Dwight", "Dylan", "Earl", "Earle", "Earnest", "Ed", "Eddie", "Eddy", "Edmund", "Grady", "Graham", "Graig", "Grant", "Granville", "Greg", "Gregg", "Gregory", "Grover", "Guadalupe", "Jerome", "Jeromy", "Jerrell", "Jerrod", "Jerrold", "Jerry", "Jess", "Jesse", "Jessie", "Joaquin", "Jody", "Joe", "Joel", "Joesph", "Joey", "John", "Johnathan", "Johnathon", "Johnie", "Johnnie", "Johnson", "Jon", "Jonah", "Jonas", "Jonathan", "Jonathon", "Jordan", "Jordon", "Jorge", "Jose", "Josef", "Joseph", "Josh", "Joshua", "Josiah", "Julian", "Julio", "Julius", "Junior", "Justin", "Kareem", "Karl", "Kasey", "Keenan", "Keith", "Mario", "Marion", "Mark", "Markus", "Marlin", "Marlon", "Marquis", "Marshall", "Martin", "Marty", "Marvin", "Mary", "Mason", "Mathew", "Merlin", "Merrill", "Mervin", "Micah", "Michael", "Michal", "Michale", "Micheal", "Warner", "Warren", "Waylon", "Wayne", "Weldon", "Wendell", "Werner", "Wes", "Wesley", "Weston", "Whitney", "Wilber", "Wilbert", "Wilbur", "Wilburn", "Wiley", "Wilford", "Wilfred", "Yong", "Young", "Zachariah", "Zachary", "Zachery", "Zack", "Zackary", "Zane"
26 };
27
28 // Create file and set up column headers
29 FILE *f = fopen(filename, "w");
30 if (f == NULL) {
31 printf("Error opening file!\n");
32 }
33
34 const char *nameCol = "Full Name";
35 const char *emailCol = "Email";
36 const char *phoneCol = "Phone";
37 fprintf(f, "%s,%s,%s\n", nameCol, emailCol, phoneCol);
38
39 char *emailDomain[] = {
40 "@gmail.com", "@yahoo.com", "@hotmail.com", "@mail.net"
41 };
42
43 // Allocate memory for buffer strings
44 size_t emailLen = strlen(names[0])*sizeof(char *);
45 char *emailBuffer = malloc(emailLen*sizeof(char *));
46
47 size_t nameLen = strlen(names[0])*sizeof(char *);
48 char *nameBuffer = malloc(nameLen*sizeof(char *));
49
50 char *phone = "555-0";
51 size_t phoneLen = strlen(phone)*sizeof(uint32_t);
52 char *phoneBuffer = malloc(phoneLen*sizeof(char *));
53 if (emailDomain == NULL || nameBuffer == NULL || phoneBuffer == NULL) {
54 printf("Null pointer(s) for buffer string(s)\n");
55 return 0;
56 }
57
58 char *firstname = malloc(count*sizeof(char *));
59 char *lastname = malloc(count*sizeof(char *));
60
61 // Start loop to create and append strings to csv
62 for (uint32_t i=0; i<count; ++i) {
63 char *randEmailDomain = emailDomain[randomInteger(i*time(0), 0, 3, 1)];
64
65 uint32_t phoneAreaCode = randomInteger(i, 201, 901, 1);
66 uint32_t phoneSuffix = randomInteger(i+1, 100, 199, 1);
67
68 snprintf(phoneBuffer, phoneLen + count, "(%d) %s%d", phoneAreaCode, phone, phoneSuffix);
69
70 uint32_t firstNameRand = randomInteger(i*count, 0, sizeof(names)/sizeof(names[0])-1, 1);
71 uint32_t lastNameRand = randomInteger(time(0)*count+i, 0, sizeof(names)/sizeof(names[0])-1, 1);
72
73 sprintf(firstname, "%s", names[firstNameRand]);
74 sprintf(lastname, "%s", names[lastNameRand]);
75
76 snprintf(nameBuffer, nameLen * count, "%s %s", firstname, lastname);
77
78 snprintf(emailBuffer, emailLen * count, "%s.%s%d%s", firstname,lastname, i, randEmailDomain);
79
80 // Write to file
81 fprintf(f, "%s,%s,%s\n", nameBuffer, emailBuffer, phoneBuffer);
82 }
83
84 // Close file and free allocated memory
85 fclose(f);
86
87 free(emailBuffer);
88 free(nameBuffer);
89 free(phoneBuffer);
90 free(firstname);
91 free(lastname);
92
93 return 1;
94}
95
96int main(int argc, char **argv)
97{
98 uint32_t count = atoi(argv[1]);
99 writeToFile("test1.csv", count);
100
101 return argc;
102}