Sponsored Content
Top Forums Programming Hsearch() problem when searching for strings. Post 302968636 by Don Cragun on Saturday 12th of March 2016 03:59:55 AM
Old 03-12-2016
Note that the code:
Code:
    e.key = word;
    e.data = (char *) file_name;
    ep = hsearch ( e , ENTER ); //create a hash table

has word and file_name with identical addresses for each entry you add to the hash table. And hsearch(e,ENTER) copies pointers to data into the hash table; not the data itself. The data values from earlier lines you load into the hash table are being overwritten by the data values from the last line you load into the hash table.

You need to read the entire file into memory and add entries into your hash table that point to where the individual elements of each entry are located instead of reading one line at a time from the file and overlaying each element value with the next line's value after you add the data values from a line into the hash table.
These 2 Users Gave Thanks to Don Cragun For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

searching for strings/user IP addresses

Hi, I'm trying to write a script, which will perform the following actions. Pick up the IP address of the PC I have used to telnet into the SUN server. Export this. Run the rest of my script. I am struggling with the first part, I know the IP address can be displayed by the command... (2 Replies)
Discussion started by: 30694
2 Replies

2. Shell Programming and Scripting

searching for filenames with search strings in another file

Hi, I have 5 files in a directory. emp1_usage.txt emp2_usage.txt emp3_usage.txt emp4_usage.txt emp5_usage.txt I am using sqlldr to get the contents of the above 5 files and store it in a temp table and update my original table using temp table. for f in *emp*.txt do sqlldr... (3 Replies)
Discussion started by: pathanjalireddy
3 Replies

3. Solaris

higlighting strings while searching

Hello experts, i am using sun solaris 9 i try to searching string from a file using more command. I wish when i search a string it will higlight the string/strings from the file. Have any idea how to do it..? I use putty. br//purple (9 Replies)
Discussion started by: thepurple
9 Replies

4. Shell Programming and Scripting

Need help in searching 2 files for strings then perform an action

I have 2 files. I basically want to search both of them to see if the 1st column ($1) matches and if it matches then check to see if the 2nd column ($2) matches, then execute some code showing the results of the matches. File 1: AAA 123 misc blah BBB 456 CCC 789 File 2: ... (2 Replies)
Discussion started by: streetfighter2
2 Replies

5. Shell Programming and Scripting

Searching Problem

Hi, I would like produce follow console-printing if I searching a string (but for all hits): e.g.: Datei1HelloWorld Option -H is not possible on my unix. Thanks for help! ---------- Post updated at 02:36 AM ---------- Previous update was at 02:34 AM ---------- my actually... (9 Replies)
Discussion started by: Timmää
9 Replies

6. Programming

Search using hsearch() Linux

Hi All, I have written a code on Linux that searches a long dictionary. I have used hsearch() function but the problem is it does not work. This is my code: //Search the count values from the dictionary. #define _GNU_SOURCE #include<stdio.h> #include<stdlib.h> #include<string.h>... (0 Replies)
Discussion started by: shoaibjameel123
0 Replies

7. Shell Programming and Scripting

Searching for strings amongst non-uniform data

Hi Guys, I have a source file which contains significant strings amongst a lot of dross in non-uniform format, I'd like to search the input file for any examples of data from my reference file, and then output any matches to a list (text file). I've made something that achieves this, it's... (4 Replies)
Discussion started by: gazza86
4 Replies

8. Shell Programming and Scripting

Searching for string between two different strings

I want to the following results using unix script, can some one help ? Thanks Input: select col1, col2 from tab1 where ......... select col1,.....,coln from tab2, tab3 where.... select clo1,clo2,col3 from tab4 where... output (results) tab1 tab2 tab3 tab4 basically I need... (5 Replies)
Discussion started by: kanagalav
5 Replies

9. Shell Programming and Scripting

Searching for a list of strings in a file with Python

Hi guys, I'm trying to search for several strings, which I have in a .txt file line by line, on another file. So the idea is, take input.txt and search for each line in that file in another file, let's call it rules.txt. So far, I've been able to do this, to search for individual strings: ... (1 Reply)
Discussion started by: starriol
1 Replies

10. UNIX for Beginners Questions & Answers

Can I combine below mentioned grep commands using OR (when searching strings having spaces)

Command 1: $script | grep 'Write to ECC( SSID=MARGIN)' Command 2: $script | grep 'is not greater than existing logical processing' The above commands run my script and search the mentioned strings but I do not want to run my script twice. It is increasing run time. Can someone tell me... (3 Replies)
Discussion started by: Tanu
3 Replies
HSEARCH(3)						     Linux Programmer's Manual							HSEARCH(3)

NAME
hcreate, hdestroy, hsearch - hash table management SYNOPSIS
#include <search.h> int hcreate(size_t nel); ENTRY *hsearch(ENTRY item, ACTION action); void hdestroy(void); #define _GNU_SOURCE #include <search.h> int hcreate_r(size_t nel, struct hsearch_data *tab); int *hsearch_r(ENTRY item, ACTION action, ENTRY **ret, struct hsearch_data *tab); void hdestroy_r(struct hsearch_data *tab); DESCRIPTION
The three functions hcreate, hsearch, and hdestroy allow the user to create a hash table (only one at a time) which associates a key with any data. The three functions hcreate_r, hsearch_r, hdestroy_r are reentrant versions that allow the use of more than one table. First the table must be created with the function hcreate(). The argument nel is an estimate of the maximum number of entries in the ta- ble. The function hcreate() may adjust this value upward to improve the performance of the resulting hash table. The corresponding function hdestroy() frees the memory occupied by the hash table so that a new table can be constructed. The argument item is of type ENTRY, which is a typedef defined in <search.h> and includes these elements: typedef struct entry { char *key; void *data; } ENTRY; The field key points to the NUL-terminated string which is the search key. The field data points to the data associated with that key. The function hsearch() searches the hash table for an item with the same key as item (where "the same" is determined using strcmp(3)), and if successful returns a pointer to it. The argument action determines what hsearch() does after an unsuccessful search. A value of ENTER instructs it to insert a copy of item, while a value of FIND means to return NULL. RETURN VALUE
hcreate() and hcreate_r() return 0 when allocation of the memory for the hash table fails, nonzero otherwise. hsearch() returns NULL if action is ENTER and the hash table is full, or action is FIND and item cannot be found in the hash table. hsearch_r() returns 0 if action is ENTER and the hash table is full, and nonzero otherwise. ERRORS
ENOMEM Out of memory. CONFORMS TO
The functions hcreate, hsearch, and hdestroy are from SVID, and are described in POSIX 1003.1-2001. The functions hcreate_r, hsearch_r, hdestroy_r are GNU extensions. BUGS
SVID and POSIX 1003.1-2001 specify that action is significant only for unsuccessful searches, so that an ENTER should not do anything for a successful search. The libc and glibc implementations update the data for the given key in this case. Individual hash table entries can be added, but not deleted. EXAMPLE
The following program inserts 24 items in to a hash table, then prints some of them. #include <stdio.h> #include <search.h> char *data[] = { "alpha", "bravo", "charlie", "delta", "echo", "foxtrot", "golf", "hotel", "india", "juliet", "kilo", "lima", "mike", "november", "oscar", "papa", "quebec", "romeo", "sierra", "tango", "uniform", "victor", "whisky", "x-ray", "yankee", "zulu" }; int main() { ENTRY e, *ep; int i; /* starting with small table, and letting it grow does not work */ hcreate(30); for (i = 0; i < 24; i++) { e.key = data[i]; /* data is just an integer, instead of a pointer to something */ e.data = (char *)i; ep = hsearch(e, ENTER); /* there should be no failures */ if (ep == NULL) { fprintf(stderr, "entry failed "); exit(1); } } for (i = 22; i < 26; i++) { /* print two entries from the table, and show that two are not in the table */ e.key = data[i]; ep = hsearch(e, FIND); printf("%9.9s -> %9.9s:%d ", e.key, ep ? ep->key : "NULL", ep ? (int)(ep->data) : 0); } return 0; } SEE ALSO
bsearch(3), lsearch(3), tsearch(3), malloc(3) GNU
2001-12-26 HSEARCH(3)
All times are GMT -4. The time now is 11:59 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy