I guess one could use a generic C code to read the first line from a txt file, as for instance described here. Does Zorro by any chance have a more convenient function to accomplish this task? Or, how would one read the LAST line in a .txt file?
Last edited by Hredot; 02/12/1820:48.
Re: Read a line from a .txt file?
[Re: Hredot]
#470914 02/12/1823:0502/12/1823:05
Well, I didn't write helpers, but I left you a ton of clues on how to write helpers for your own use case.
See attached.
I suppose that if I had more time, I can write it into an identical style function, like "file_read_firstline" and "file_read_lastline".
Code:
int main()
{
// create a file
const string f = "./mumble.txt";
file_write(f,"Many mumbling mice",0);
file_append(f,"\nAre making merry music in the moonlight!",0);
file_append(f,"\nMighty nice!",0);
// check file length
long l = file_length(f), l2 = 0;
printf("\nlength: %d",l);
// allocate memory for reading the file into a string
char* str = malloc(l+1);
memset(str,0,l+1);
// fill the string with data and check how much data was copied
l2 = file_read(f,str,l+1);
printf("\nlength2: %d",l2);
// let's see where the newline characters are
int i = 0;
for(i = 0; i<l; i++)
{
if(str[i]=='\n') printf("\ni: %d, found newline!",i);
}
// let's print the string
printf("\n%s",str);
// let's find the last newline character (if not found, zero)
for(i = l-1; i>0; i--)
{
if(str[i]=='\n') {break;}
}
// point to the last part of the string by offsetting the pointer
char* lastline = str + i;
printf("%s",lastline);
// okay, now let's alter the original string to convert it into the first line only.
// Remember, a string is all data before a null character.
for(i=0; i<l; i++)
{
if(str[i]=='\n') {str[i]=0;break;}
}
// let's print the altered string (first line)
printf("\n%s",str);
// always free memory after using malloc
free(str);
return 0;
}
I wonder, does malloc remember how much memory was allocated originally, or does free(str); only free up memory up to the null character, which could potentially lead to a memory leak?
Isn't loading the entire file just to read one line a bit excessive? Perhaps some ideas presented here could help ease the workload.
Re: Read a line from a .txt file?
[Re: Hredot]
#470937 02/13/1813:4102/13/1813:41
does free(str); only free up memory up to the null character, which could potentially lead to a memory leak?
No. You can use malloc and free for any kind of data, not just char arrays.
Quote:
Isn't loading the entire file just to read one line a bit excessive? Perhaps some ideas presented here could help ease the workload.
I was trying to help you solve your problem in five minutes or less. You're writing in C... why do you care about these optimizations? Are you reading gigabytes of data?
Oh, I don't know... Perhaps I don't have a good perception for what could cause slowdown in C. Coming from a more higher level languages, I get worried about that too much I guess.
In any case, thank you for your help! This is very useful code!
Last edited by Hredot; 02/13/1814:25.
Re: Read a line from a .txt file?
[Re: Hredot]
#470942 02/13/1814:3102/13/1814:31