pietro Δημοσ. 28 Φεβρουαρίου 2005 Δημοσ. 28 Φεβρουαρίου 2005 Hi.. exw ena text arxeio to opoio exei se ka8e grammh tou mia IP dieu8hnsh kai thn antisthxh onomasia tou . px 192.168.0.10 computer1 192.168.0.20 computer2 ktl... Twra egw 8elw na dinw thn onomasia px computer1 kai na mou epistrefei thn IP dief8unsh uparxei kapoia function se C pou na psaxnei gia ena string mesa sto arxeio h kati antoistixo pou 8a mporouse na me voh8hsei? upo8etw oti 8a prepei hdh na exw ftiaksei ena data type tupou FILE kai na anoiksw to arxeio me fopen gia read .... auta gia twra
baxter Δημοσ. 28 Φεβρουαρίου 2005 Δημοσ. 28 Φεβρουαρίου 2005 fscanf(file,"%s %s",s1,s2); mehri na to vreis
pietro Δημοσ. 2 Μαρτίου 2005 Μέλος Δημοσ. 2 Μαρτίου 2005 err pws 8a lew gia poio string 8a 8elw na psaksw ???
metaxa5 Δημοσ. 3 Μαρτίου 2005 Δημοσ. 3 Μαρτίου 2005 > #include <stdio.h> #include <memory.h> #include <string.h> int SearchForIPAddress (char *szIPTableFileName, char *szComputerName, char *szIPAddress); int main(int argc, char* argv[]){ char szIPAddress [100] = {'\0'}; if (SearchForIPAddress ("C:\\IP.txt", "my-pc", szIPAddress)){ printf("Computer name found. IP: %s\n", szIPAddress); } else{ printf("Sorry no computer found with this name.\n"); } return 0; } int SearchForIPAddress (char *szIPTableFileName, char *szComputerName, char *szIPAddress){ FILE *fp; char szIP[100]; char szName[100]; fp = fopen(szIPTableFileName, "rb"); if (fp == NULL){ return 0; } if ((szComputerName != NULL) && (szIPAddress != NULL)){ while (!feof(fp)){ memset(szIP, 0, 100 * sizeof(char)); memset(szName, 0, 100 * sizeof(char)); fscanf (fp, "%s %s", szIP, szName); if(!strnicmp(szComputerName, szName, strlen(szComputerName))){ strcpy(szIPAddress, szIP); return 1; } } } return 0; } Ορίστε μια μικρή ρουτίνα που θα κάνει την δουλειά που θες. Βέβαια όπως θα διαπιστώσεις στο παράδειγμα το πρόγραμμα ψάχνει στο αρχείο IP.txt για έναν υπολογιστή με το όνομα my-pc. Εσύ μπορείς να βάλεις να ψάνει σε όποιο αρχείο θες και όποιο όνομα υπολογιστή θες. Εάν το όνομα του υπολογιστή βρεθεί η ρουτίνα θα γυρίσει 1 και η διεύθυνση IP θα περιέχεται στην μεταβλητή szIPAddress που πέρνει ως όρισμα η ρουτίνα. Εάν το όνομα του υπολογιστή δεν βρεθεί η ρουτίνα θα γυρίσει 0.
eurander Δημοσ. 3 Μαρτίου 2005 Δημοσ. 3 Μαρτίου 2005 Παντως νομιζω πως ειναι πιο ευκολο με ενα μικρο script σε awk ή perl.
metaxa5 Δημοσ. 3 Μαρτίου 2005 Δημοσ. 3 Μαρτίου 2005 Αν και δεν γνωρίζω καμία από τις γλώσσες που αναφέρεις, είμαι σίγουρος πως θα ήταν πιο εύκολο!!!! Πάντως ο pietro ζήτησε κάποια C function.
pietro Δημοσ. 6 Μαρτίου 2005 Μέλος Δημοσ. 6 Μαρτίου 2005 Na rwthso twra egw 8elw na psaxnw gia mia egrafh sto text arxeio kai na thn svhnw.... pws mporei na ginei auto?? Auto pou prospa8hsa einai me thn fprintf na eisagw ton xarakthra backspace \b arketes fores afou prwta exw vrei me thn fscanf thn egrafh pou 8elw na diagrapsw.. ala tpt .. otan h fscanf vriskei mia eggrafh o file pointer menei sto shmeio pou vre8hke h eggrafh ??
My8os Δημοσ. 6 Μαρτίου 2005 Δημοσ. 6 Μαρτίου 2005 Ένας τρόπος είναι να αντιγράφεις το αρχικό αρχείο σου σενα δεύτερο μέχρι να συναντήσεις την γραμμή που θές να σβήσεις. Σε αυτή την περίπτωση δεν κάνεις εγγραφή στο δεύτερο αρχείο αλλά συνεχίζεις να διαβάζεις απο το πρώτο. Όταν τελείωσεις με αυτή την διαδικασία, χρησιμοποιείς τις remove(για να αφαιρέσεις το αρχικό αρχείο σου) και rename(για να μετονομάσεις το δεύτερο αρχείο στο όνομα του πρώτου) και είσαι έτοιμος .
metaxa5 Δημοσ. 7 Μαρτίου 2005 Δημοσ. 7 Μαρτίου 2005 > #include <stdio.h> #include <memory.h> #include <string.h> #include <io.h> #include <malloc.h> int DeleteEntryByComputerName (char *szIPTableFileName, char *szComputerName); int main(int argc, char* argv[]){ if (DeleteEntryByComputerName ("C:\\IP.txt", "qwe")){ printf("Computer name found -- Line Deleted !!!!\n"); } else{ printf("Sorry no computer found with this name. No line deleted.\n"); } return 0; } int DeleteEntryByComputerName (char *szIPTableFileName, char *szComputerName){ FILE *fp; char szIP[100]; char szName[100]; long lFileSize; long lDataBufferPointer; unsigned char *bpFileData; fp = fopen(szIPTableFileName, "rb"); if (fp == NULL){ return 0; } lFileSize = _filelength(_fileno(fp)); bpFileData = (unsigned char*)malloc(lFileSize * sizeof(unsigned char)); memset(bpFileData, 0, lFileSize * sizeof(unsigned char)); lDataBufferPointer = 0; if (szComputerName != NULL){ while (!feof(fp)){ memset(szIP, 0, 100 * sizeof(char)); memset(szName, 0, 100 * sizeof(char)); fscanf (fp, "%s %s", szIP, szName); if(strnicmp(szComputerName, szName, strlen(szName))){ memcpy (bpFileData + lDataBufferPointer, szIP, strlen(szIP) * sizeof(char)); lDataBufferPointer = lDataBufferPointer + (strlen(szIP) * sizeof(char)); memcpy(bpFileData + lDataBufferPointer, " ", sizeof(char)); lDataBufferPointer++; memcpy (bpFileData + lDataBufferPointer, szName, strlen(szName) * sizeof(char)); lDataBufferPointer = lDataBufferPointer + (strlen(szName) * sizeof(char)); memcpy(bpFileData + lDataBufferPointer, "\n", sizeof(char)); lDataBufferPointer++; } } } fclose(fp); fp = fopen(szIPTableFileName, "w"); if (fp == NULL){ return 0; } fwrite (bpFileData, lDataBufferPointer * sizeof(unsigned char), 1, fp); fclose(fp); free(bpFileData); return 1; } Νομίζω πως αυτό θα σε βοηθήσει....... Αν δεν καταλαβαίνεις κάτι στην λειτουργία του, στείλε μου ένα pm.
eurander Δημοσ. 7 Μαρτίου 2005 Δημοσ. 7 Μαρτίου 2005 metaxa5: uparxei kapoia function se C pou na psaxnei gia ena string mesa sto arxeio h kati antoistixo pou 8a mporouse na me voh8hsei? Αυτο το "κατι αντιστοιχο" εγω το καταλαβαινω ως "κατι αλλο εκτος απο C..." Επισης υποστηριζω πως για file handling καλυτερο ειναι να χρησιμοποιησεις μια scripting language που ειναι φτιαγμενη για αυτον το σκοπο κυριως...οπως ειναι η awk και η perl.
metaxa5 Δημοσ. 7 Μαρτίου 2005 Δημοσ. 7 Μαρτίου 2005 eurander μπορείς να παραθέσεις κάποιο τμήμα κώδικα σε μια από τις γλώσσες που αναφέρεις, που να εκτελεί την λειτουργία που ζητά ο pietro, ώστε να πεισθώ οριστικά ότι οι scripting γλώσσες είναι πιο λειτουργικές και εύκολες από την C;
eurander Δημοσ. 7 Μαρτίου 2005 Δημοσ. 7 Μαρτίου 2005 Σε awk: #!/bin/awk -f BEGIN { search_str = "192.43.100.100" while (getline < "IP_with_names_list.txt" > 0){ if($1 == search_str){ print $2 } } } ...αν το αρχειο εχει τη μορφη που λεει ο pietro. Ψαχνει για το "192.43.100.100" στο "IP_with_names_list.txt". Αντι να αλλαζεις το "192.43.100.100" καθε φορα με το χερι, μπορεις να βαλεις τα IP σε αρχειο και να τα διαβαζει απο εκει το script. Υπαρχει και ενα manual: http://www.cs.uu.nl/docs/vakken/st/nawk/nawk_toc.html
metaxa5 Δημοσ. 7 Μαρτίου 2005 Δημοσ. 7 Μαρτίου 2005 Απίστευτο.... Είχες δίκιο τελικά. Υπάρχει περίπτωση όμως αυτός ο κώδικας να είναι standalone ή πρέπει να τρέχει πάντα μέσα από κάποια scripting μηχανή;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.