Skip to content

Instantly share code, notes, and snippets.

@supermario
Created August 3, 2009 05:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save supermario/160369 to your computer and use it in GitHub Desktop.
Save supermario/160369 to your computer and use it in GitHub Desktop.
// MarioRogic, mrog212
// Wed15-Bugle
// 29/07/09
// Lab02: analyse dna sequences
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getLineCount(FILE * pFile);
int main (int argc, char **argv) {
if (argc < 2) {
printf ("You need to provide a filename for analysis!\n");
return (0);
}
char buffer[100]; /* Buffer for reading in from file */
FILE * pFile; /* File stream */
int lowest = 0; /* Array index of the lowest value */
char *pTemp = NULL; /* Temp pointer */
int i = 0, j = 0; /* Loop counters */
// Get filename and open for reading
pFile = fopen(argv[1], "r");
if (pFile == NULL) {
perror("Error opening file");
} else {
// Get number of lines and initialise variable to hold data
int lines = getLineCount(pFile);
char *pStrings[lines];
// Read all lines from file into malloc'ed array locations
i = 0;
while (fgets(buffer , 100 , pFile) != NULL) {
// Fix up if no trailing newline
if (buffer[strlen(buffer)-1] != 10) {
buffer[strlen(buffer)] = 10;
}
// Malloc new data location
if ((pStrings[i] = (char*)malloc(strlen(buffer) + 1)) == NULL) {
printf("Memory allocation error.");
exit(1);
};
strcpy(pStrings[i], buffer);
i++;
}
fclose(pFile);
// Order data using in place selection sort
for (i = 0; i < lines; i++) {
lowest = i;
// Find the next lowest string
for (j = i; j < lines; j++) {
if(strcmp(pStrings[lowest], pStrings[j]) > 0) {
lowest = j;
}
}
// If a lower string found than current, swap
if (lowest != i) {
pTemp = pStrings[i];
pStrings[i] = pStrings[lowest];
pStrings[lowest] = pTemp;
}
}
// Print sorted data
i = 0;
while (pStrings[i]) {
printf("%s",pStrings[i]);
//free(pStrings[i]); /* This line when uncommented causes additional problems */
i++;
}
}
printf("\n");
return (0);
}
int getLineCount(FILE * pFile) {
// Loop through all characters in file, counting newlines
int ch, prev = '\n', lines = 0;
while ( (ch = fgetc(pFile)) != EOF ) {
if ( ch == '\n' ) {
++lines;
}
prev = ch;
}
if ( prev != '\n' ) {
++lines;
}
rewind(pFile);
return(lines);
}
TAATGTTATCTGAGATCGGGGCATCCTTTTAATTA
GCCTGCAGAGTATATGACGTTTTTATATTCCATTA
ATCACATTGGGTCCCTAAGGTGCGGAACGGGCACA
ACTCATAGAGGCTCACATGATCGCCTGTTAGCATG
GCTTCGGCTCTTAGGGGTCAATATTCACCGGCGCA
TAGTGTTGAGACTCCCATCAAGCGGAACCGGCACA
TAGCTTATCAGACACTACACTGGCGGAGGGCCGCG
TAGCACCATCTGATTAGCAGCCCATTCCCCGGCAA
GGGGGGGGGACGGGAACGCCGTTGTCGTCCACCCC
AGCCTGGTCCACATGGCGGCCGATATCCAATCGTA
GCTACAACAGACTGATCGTGGCATAAGATATTACG
AGTAATCGTTGTCGGTGAGTACGCCGACCGCGTAC
CGTACCCACCAAGTCACCATTCCTTCGATATCCAT
CGCGACCTCAGATCAGACGTGCGCTGGTATTCACG
GTCCTTGTTGTATAAACTAATACACCAGTAACGCC
GCAAAGGATGACAAAGTCACCCGCCCTTGGCTACG
TGGCTCAGGGACTGTGCTGTGTAAAGGTTAATGTG
ATTCCACTGCTCGACCGCGCGCTGCGGATGATTAC
GGCTCGTTGGTCTAGGGGTATGATCCCTATTATTC
TAGTCACATGGTGTGCTCATTCATAAGGTGCCGCA
TGCGTTCGCGCTTTCCCCTGCGCCTTGTAATGTGT
ATCCCATCCTCGTCGCTCAACGCCTTGTAATGTGT
CGCGTGGAGAGTAGTAGCTGGATAAGGTCGGCAGT
ATCACATTGGGTCCCATAGAGGCCCTTGGGGCATG
TAGTGTTTAGACATTAGCCAGTGCGGAAAATTACG
AGATGTCATGTCAATGCGTGCACATAAAACGCCGT
TAGCACCATCTGACCGCTGCCGTATTCCCGCCGCG
AGTAAGGTCAGCTAAGCGGACTATCAAGTTACATA
GGCTCGTTGGTCTAGGGGTATGATTATCGCCGCCT
ATAACGTGAAACTTTTTACTTGATATCCAACCGTA
CCCGGGTTTTTCACAAAATTTCCCGCCGTTATCGG
ACGATACCCAACGCCCTTGCTTATTCCAATTAGCA
GTTCAACTTTAAGCCCATTTGTGAGGTTGCTGGTA
GTTGCAATACTTAGCCCCCATTGTATTCCATAATG
GCTAAACCTAGCCCCAAACCCACTCCACCTTACTA
CAGGACACTGCACTGTACTCATTGTAAGGGGCCGC
TAGACAGTGTCAAGTGCGTACATAGAATTGGCGCA
GCATTGGTGGTTCAGTGGTAGAACCTCTAAAGGGC
ATCACATTGAACTTTATAATATTCCTTAATTACAC
ATTTCCAAGTTGGACCGGAGGAATTTTTTAATGCA
CCTTCCAAGCAGTGTCAAACCTATCGCCCCAATCG
TAGGGGTTTTAAGTGATGTTGGAAACGGGTAAAAC
AGATGAGATGTCTTACGAACACGCCAAGGCCGCGT
ATTCACGACGGTTCCATAACTGCCGCGCCAATTAT
GCTTCTGTAGTGTAGTGTGGGCACATGGATAACCA
TAGTGTTCCTCTCAATCAACCGGCGGAACCGGCAT
TAGGAATAGTTATCAATGAACGATATTCCAATTAC
TAGGTGGTAGACTAATTGTGGATTCTTGTAATGCA
GCAGTCGTAGGGCAATTTGTGGGCCCTTGGCCGTG
AGCTACATTGTCTGTAGGGGATAATTCCGGCTACC
TAGAGCGCACTCAGTCGCGGCGTATAAGTGCGGCA
TAGCTTATCAAGTTGTTGCTGACGCCCCCCGGCAT
CCCCCCACTGCTAACGGGTTGACCAAACGTTCCAT
TCCTCGTTAGTATAGTGGTGGACGCCCCCGCCCCA
TAGCACCATCTGACCGGTCGCGTACCTTCCGGCGC
TAGCACCATCTGACATCGTGGCGCGCGGTTGGCAT
GCGCCGCTGGTGTAGTGGTATCATGTGCTCATCCT
TCCCTGGTGGTCTAGTGGTTAGGAAAGCCCGCCCC
CGGTAGAGCATGAGACTCTTAATCTCAGGGTCGAG
TAACTTATCAGACTGACGTTGATATTCCAATTACG
TCGATTCCCCTTGGGGGAGCCGACGCCTTGGCCGG
CCATGATTTTCGGTGAAAATTGTGTTGTATTCCAA
GATCGATGTGGTGACCATCACGTGCGGAACCGGCA
ATGGAGTAGTGTTCACATGAGATAACCCCGGCCGT
GCTAAACCTAGCCCCAAACCCACTCCGTTCCAATT
AGATGTCTAGAGAAATTAGCCGTATTCCAATTTGC
TGAGGTAGTAGATTGCGTTTCGCCTTGCGGCGTGT
CGGCGGGGGATTAAATCCTTATCGCCTTGGCCGTA
AGCTCGAGCTGTGTTTCTAGTATTCGTTATGTACA
TGGCTTATCAGAATGGCACAGTACGCCTTGGCCGT
TTCACTGCGCTTAAAGTGATAATATCCAATTACGC
ATTTCGTAGCGCGACCATTCATCGCCCTCAATTCA
ACCCCACTCCTGATATTTTGTCTTCTTTTATTCCA
GCCGCGCGGGGGCCCTTGCGGCATGTCGTCCACCC
TAGCTTATGTCTGACTTGTTGCCATATCACCCCAC
CGATGTTGCTCTCGTAGCGTTCGCCTTGCGGCACA
GGCTCGTTGGTCTAGGGGTACAGCCATACTGGCGG
GCCCTGTATGGGATCCTTGCAATGTATTCCAACCG
AACCGGGCGGTTTGTGGTTTGCCCTTGGCCGTGTG
AACCGGATACTTGGAAGAGGGAACGGGATTTCCAA
TCGATCCCCGGCATCCTGGTTGTATTCCAATTACG
TAGCTTATGTCTGTGAACAACGATATAACCAATGC
CGACACCTCTCAGTTATATTTCGGGAACGCCGTGT
TGTGACTCTGATATACTTGAGACGAAGGTTAATGT
TAGCTTATGTCCACAGCAAACGTATAAGGTTAACA
CGAAGCAAGTGTCTGTGTCTCTATTCCGGCGCCGT
CAAAGTGCTGTTCGTGCTCAGGGAATAAGACCCCC
TTCACTGCCGAACTTTTTCTAGATGGAACCGGCAA
TAGCTATACAGAGCAGCACCATGCGCCCCAATTGT
ACGCGGGAGGCCCGGGTTCGCGGAAATTAAACACG
GTCCTTGTGGTATAAACTAATACACCAGTAGCCCC
TAGCTTATGTCCACAATGTTGGTGGTGTATTCCAA
CACCATCAATGAACATTCCTCTAAGCGGGGGGCCG
CGAAGCGCACTTGTGATGTTGCATATTCCAATTAC
ATCCCACTTCTGACACCAAACGCCTTGATTACTGT
ATTCCCATGGAGCTGGCAGAATGTTTTCCCCGGCC
AGCCCAGCGCCGAATCCCCGCGCCTTGGCCGTGTG
TATTGTGTCCACTTTTCAAGGACGCCTTGGCCGTA
GCTAAACCTACGGGGTTTGGGTGAGGTGGCGGAAC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment