Adding to an array in an external file, and adding elements to it.


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Adding to an array in an external file, and adding elements to it.
# 1  
Old 03-13-2019
Adding to an array in an external file, and adding elements to it.

I have an array in an external file, "array.txt", which contains:


Code:
char *testarray[]={"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};

I want to be able to add an element to this array, and have that element display, whenever I call it, without having to recompile the source code. Is this possible?

--- Post updated at 09:23 PM ---

I should also mention, that I am using
Code:
#include "array.txt"

with this file.
# 2  
Old 03-13-2019
If you keep a file like this, it's much easier to add to:
Code:
Zero
One
Two
Three
Four
Five
Six
Seven
Eight
Nine

Then you translate it into an array with
Code:
( echo "static char *testarray[]={" ; xargs printf "\"%s\"," < arr ; echo "};" ) > array.h

It ending in a comma is allowable in C, which makes this easier.

The 'static' is to prevent linker errors if you use this in more than one file.
# 3  
Old 03-13-2019
Ok. Thank you for that. But, I can't quite understand how I implement that into my code...
# 4  
Old 03-13-2019
Is it a function, is it a shell script, what exactly is it?
# 5  
Old 03-14-2019
Code:
cat text.txt
>the table stands at the window

Code:
cat test.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
	int i;
//	char **testarr = (char**)malloc(sizeof(char*));
	char *dl = ", \t\n";
	char *word;
	FILE *file;
	file = fopen("text.txt", "r");

	fseek(file, 0l, SEEK_END);
	long size = ftell(file);
	char *buf = (char*)malloc(size * sizeof(char));
	fseek(file, 0l, SEEK_SET);
	fread(buf, sizeof(char), size, file);
	fclose(file);

	char **testarr = (char**)malloc(size * sizeof(char*));
	word = strtok(buf, dl);
	for(i=0; word != NULL; i++) {
		testarr[i] = (char*)malloc(strlen(word));
		strcpy(testarr[i], word);
		word = strtok(NULL, dl);
	}
        free(buf);

	for(int j = 0; j < i; j++) {
		printf("%s\n", testarr[j]);
                free(testarr[j]);
        }
        free(testarr);
}

Code:
./test
the
table
stands
at
the
window

--- Post updated at 10:46 ---

fixed the code, commented out the wrong line Smilie

--- Post updated at 11:41 ---

Something I am confused, I can not properly allocate memory for addresses in a dynamic array

--- Post updated at 12:34 ---

I fixed in a dynamic array.
But in the strtok function, the valgrind shows one error
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
	int i;
	char *dl = ", \t\n";
	char *word;
	FILE *file;
	file = fopen("text.txt", "r");

	fseek(file, 0l, SEEK_END);
	long size = ftell(file);
	char *buf = (char*)malloc(size * sizeof(char) + 1);
	fseek(file, 0l, SEEK_SET);
	fread(buf, sizeof(char), size, file);
	fclose(file);

	char **testarr = (char**)malloc(sizeof(char*));
	word = strtok(buf, dl);
	for(i=0; word != NULL; i++) {
		testarr = (char**)realloc(testarr, sizeof(char*) + sizeof(char*) * i);
		testarr[i] = (char*)malloc(strlen(word) + 1);
		strcpy(testarr[i], word);
		word = strtok(NULL, dl);
	}
	free(buf);

	for(int j = 0; j < i; j++) {
		printf("%s\n", testarr[j]);
		free(testarr[j]);
	}
	free(testarr);
}

--- Post updated at 13:16 ---

Collected the program with debug information and Valgrind calmed down Smilie

--- Post updated at 13:27 ---

Add words to the file
Code:
cat text.txt
the table stands at the window
and the picture hang on the wall

Run without recompiling
Code:
./test
the
table
stands
at
the
window
and
pucture
hung
on
the
wall


Last edited by nezabudka; 03-14-2019 at 07:49 AM..
This User Gave Thanks to nezabudka For This Post:
# 6  
Old 03-14-2019
Awesome. Thank you. Smilie
# 7  
Old 03-15-2019
Thanks to everyone for their help. Now, i'd like to know, if possible, how do I display this array?

--- Post updated at 07:49 PM ---

Let me elaborate a little more on what i'd like to see... I'd like to be able to traverse the elements in the array with the arrow keys. That's essentially what i'm trying to do. I already have the code ready to accomplish this. I just need to be able to feed the function the name of the array. And that's it.


Thanks.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Adding Two Array in shell script

Hi Experts, I've got this problem where I need to add two array in shell script such that that is an element is greater than 9 then it get further split into individual digit, something like below : Input :- array1=(2 6 8 9 10 12) array2=(5 4 6 8 12 14) Output :- array3=(7 1 0 1 4 1 7 2 2... (8 Replies)
Discussion started by: mukulverma2408
8 Replies

2. Solaris

Solaris - Sendmail - Adding .com.gr in external senders e-mails

Hello Everybody ! I'm Harry from Athens Greece and i have a problem with my Sendmail 8.13.3 installed on Solaris SunOS ultra 5.10. The problem is that when someone sends to us an e-mail and his e-mail address is like : xxxx@xxxx.com, our e-mail server adds up in the senders address a .com.gr... (2 Replies)
Discussion started by: Mcasim
2 Replies

3. Shell Programming and Scripting

Adding an element to a bash array with a variable

Hello, I have a simple task and I am having some trouble with the syntax. I have a variable with an assigned value, CMD_STRING='-L 22 -s 0 -r -O -A i -N 100 -n' I would like to add that variable to an array. As far as I have been able to look up, the syntax should be something like, ... (4 Replies)
Discussion started by: LMHmedchem
4 Replies

4. Shell Programming and Scripting

Adding results of a find to an array

I'm trying to add the paths of all the xml files in certain directories to an array. I want to use the array later in my code. Anyway, for some reason this isn't working. Any help would be appreciated. Path_Counter=0 for result in "find * -name '*.xml'"; do XmlPath="$result" echo... (2 Replies)
Discussion started by: Fly_Moe
2 Replies

5. Shell Programming and Scripting

Adding new lines to a file + adding suffix to a pattern

I need some help with adding lines to file and substitute a pattern. Ok I have a file: #cat names.txt name: John Doe stationed: 1 name: Michael Sweets stationed: 41 . . . And would like to change it to: name: John Doe employed permanently stationed: 1-office (7 Replies)
Discussion started by: hemo21
7 Replies

6. Shell Programming and Scripting

Problem adding into an array field!!!

Hi, Kindly assist by analyzing the code below and suggest changes to achieve the required output. The input file: 01-010241800000 35000 MV010 02/03/09 0306 03060226 03 02-004103300000 470000 MV010 02/03/09 0301 03010276 03 The objective is to convert field No4. from dd/mm/yy to yyyymmdd... (5 Replies)
Discussion started by: talk2pawee
5 Replies

7. Solaris

Adding external disk array to a live server

Hi all Ive got a v440 with an external T3 RAID in a dual bus configuration. I need to add an additional JBOD extension to the disk array via two VDCH cables. Now, can I do this as the server is live ? Can I just plug the two cables in, switch on the additional extension ? Will this cause... (1 Reply)
Discussion started by: sbk1972
1 Replies

8. Shell Programming and Scripting

Adding array element in KSH

All, I would like to add the first 10 elements of an array. Here is how I am doing it now (only included first few add ops): #!/usr/bin/ksh ###Grab the array values out of a file### TOTAL=`awk '/time/' /tmp/file.out | awk '{print $4}'` set -A times $TOTAL SUM=$((${times} + times... (3 Replies)
Discussion started by: Shoeless_Mike
3 Replies

9. Shell Programming and Scripting

Search array elements as file for a matching string

I would like to find a list of files in a directory less than 2 days old and put them into an array variable. And then search for each file in the array for a matching string say "Return-code= 0". If it matches, then display the array element with a message as "OK". Your help will be greatly... (1 Reply)
Discussion started by: mkbaral
1 Replies

10. Solaris

adding existing disks to a 3510 array

I would like to extend a logical drive on our 3510. I have four unallocated disks which I would like to use for this purpose. The 3510 supports a Sun Cluster but for now all I wish to see is a "new" disk when I run format. I am a little familiar with the telnet/ssh session on the 3510 but am... (2 Replies)
Discussion started by: malcqv
2 Replies
Login or Register to Ask a Question