Πρόβλημα αναζήτησης σε αρχείο

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
katerinaaa
Δημοσιεύσεις: 109
Εγγραφή: 28 Ιαν 2010 12:46

Πρόβλημα αναζήτησης σε αρχείο

Δημοσίευση από katerinaaa » 09 Δεκ 2010 15:17

Γεια σας,
έχω ένα αρχείο στο οποίο θέλω να κάνω μια αναζήτηση και απλά θα θελα να μου δώσετε ια γενική ιδεά γιατί δε ξέρω πως ακριβώς να το κάνω.

Το αρχείο μου είναι της μορφής
0 0 1 2 3
0 1 3 4 5
0 2 4 5 2
...
0 0 6 2 3
0 1 7 4 5
0 2 9 5 2

και εγώ θα ήθελα να φτιάξω ένα πρόγραμμα το οποίο να διαβάζει τις 2 πρώτες τιμές (δηλαδή 0 0) να κρατάει σε μια μεταβλητή sum την τιμή της τρίτης μεταβλητής δηλαδή 3 και μετά να αναζητά όλο το αρχείο για να δει μήπως ξαναυπάρχι η γραμμή 0 0 ..
αν υπάρχει απλά θέλω να προσθέσει στο άθροισμα και την αντιστοιχη τιμή της τρίτης μεταβλητής.
Αυτό θέλω να το κάνει για κάθε γραμμή.

Δηλαδή θα θελα μια έξοδο στο παραπάνω
0 0 7(=1+6)
0 1 10(=3+7)
0 2 13(=4+9)

Δεν είναι άσκηση, απλά είναι πολύ μεγάλο το αρχείο και δε γίνεται να καθήσω να το κάνω με το χέρι.

Αν μπορείτε να μου πείτε μια γενική ιδέα πως θα μπορούσα να το λύσω σε C++..
Ευχαριστώ εκ των προτέρων

Κώδικας: Επιλογή όλων

#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;

int main&#40;&#41; 
&#123;
    float width&#91;&#93;,height&#91;&#93;,sum&#91;&#93;,var1; //πόση μνήμη να δεσμεύσω ?
    int counter=0,i;
    

    ifstream inFile;
    inFile.open&#40;"data.txt"&#41;;

    if &#40;!inFile&#41; 
    &#123;
          cout << "Unable to open file";
          exit&#40;1&#41;;
    &#125;

    while&#40;inFile&#41;
    &#123;
         inFile >> width&#91;counter&#93; >> height&#91;counter&#93; >> var1&#91;counter&#93;; //εδώ πως θα το κάνω να παραλείψω τις επόμενες τιμές που είναι στην ίδια γραμμη ?
      
       for&#40;i=0;i<counter;i++&#41; 
          if&#40;width&#91;counter&#93; == width&#91;i&#93; && height&#91;counter&#93; == height&#91;i&#93;&#41;
              sum&#91;counter&#93; = sum&#91;counter&#93;+sum&#91;i&#93;;
      
      counter++;
  &#125;
   


inFile.close&#40;&#41;;

system&#40;"pause"&#41;;
return 0;
&#125;

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Πρόβλημα αναζήτησης σε αρχείο

Δημοσίευση από gvre » 09 Δεκ 2010 22:39

http://www.cplusplus.com/reference/stl/map/

Ακολουθείς τα παρακάτω βήματα:

1. Διαβάζεις μια γραμμή από το αρχείο.
2. Αποθηκεύεις τις 3 πρώτες τιμές της γραμμής (με sscanf, strtok ή όπως αλλιώς σε βολεύει).
3. Δημιουργείς το key με τις 2 πρώτες τιμές που διάβασες.
4. Ελέγχεις αν υπάρχει το συγκεκριμένο key μέσα στο map με τη find.
5. Αν δεν υπάρχει, το προσθέτεις και του δίνεις ως value την 3η τιμή που διάβασες. Αν υπάρχει, προσθέτεις στο value την 3η τιμή που διάβασες.
6. Αν δεν είσαι στο τέλος του αρχείου, πηγαίνεις ξανά στο βήμα 1.

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες