Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

lies doch einfach die datei zeilenweise ein und speicher jede zeile in einem vector<string>. dann hast du zwar die komplette datei im arbeitsspeicher, kannst dann aber auch die zeilen direkt ansprechen. kommt halt auch mit drauf an, wie groß die datei ist.

ein vektor ist sowas wie ein array.

Geschrieben
Original geschrieben von Woodstock

Das ist bei an die 15000 Zeilen aber nicht so lustig.

Bine

kommt auf deinen rechner an ... ich mach das mit 20 mb dateien ... die haben teilweise über 130.000 Zeilen. ausprobieren.

Geschrieben

Wenn man nicht aus perfomance-Gruenden die Datei cachen muss, sollte man solche Tools immer so schreiben, dass sie auch bei einer Terabyte-Datei funktionieren, das ist ja nicht wesentlich komplizierter.

Uli

Geschrieben

@Johannes: Nee, das hilft mir nicht, weil es keine Code Datei ist. Kurz zur Erklärung: Ich habe da ein Programm welches mir alle Textdateien die auf der Festplatte vorhanden sind sucht, öffnet und Wort für Wort ausliest. Dieses Programm schreibt die Wörter in eine Datei, und die Pfadangaben in eine Andere. Die Pfadangabe wird nur einmal die die Datei geschrieben -> Wird der gleiche Pfad nochmal angegeben wird er trotzdem nicht in die Datei geschreiben. Zu dem werden hinter die Wörter Zahlen geschreiben. Nämlich im Grunde genommen die Zeilenzahlen der PfadangabeDatei.

Beispiel:

1. Datei:

Bla 1 5

Blubb 2 4 5

Hallo 3 4

2. Datei:

c:\Hallo.txt

c:\bal.txt

c:\windows\bal.txt

c:\personal\Texte\Blubb.txt

c:\personal\Briefe\Holla.txt

Jetzt will ich nach den bestimmten Wörtern suchen lassen (welche der User angeben können soll), sagen wir mal Blubb.

Ich durchsuche also meine erste Datei, und siehe da, das Wort Blubb kommt in der Datei c:\bla.txt, c:\personal\Texte\Blubb.txt und der c:\personal\Briefe\Holla.txt vor. Und jetzt will ich eben ausgeben lassen:

Das Wort Blubb kommt vor in: c:\bla.txt, c:\personal\Texte\Blubb.txt und der c:\personal\Briefe\Holla.txt

Und dafür passt das Programm nicht wirklich was da zum download angeboten wird.

Bine

Geschrieben

moin,

geht das nicht mit schlichten ANSI-C Befehlen ???

also in etwa so:

while (fgets(buffer,buffer_laenge,file_streamA) != NULL)

{

if (sscanf("%s %d %d",&wort, &data_A, &data_B) == 2)

{

if (!strcmp(wort,suche_wort))

{

int a;

for (a = 0; a < data_A; a++)

fgets(bufferA,buffer_len,file_streamB)

int b;

for (a = 0; a < data_A; a++)

fgets(bufferA,buffer_len,file_streamB)

printf("Datei-A: %s", bufferA);

printf("Datei-B: %s", bufferB);

break;

}

}

}

man müsste das ganze nur dynamisch irgendwie machen ???

hoffe das hilft

Geschrieben

das mit den vektoren funktioniert so:

void main() {

vector<string> datenVec;

string zeile;

einlesen (ein mal über jede input zeile) {

zeile = eingelesene zeile;

datenVec.push_back(zeile);

}

// anzahl zeilen ausgeben:

cout << "Es wurden " << datenVec.size() << " Zeilen eingelesen\n";

}

Vektoren sind, wie gesagt, sowas wie arrays. einfache Vektoren sind zweidimensional:

datenVec[0] = "das ist der text der ersten zeile"

datenVec[1]= "das ist der text der zweiten zeile"

direkt auf elemente eines vektors kannst du so wie oben zugreifen, mit eckigen klammern. mach dir da aber lieber ne funktion für, denn wenn du auf ein element zugreifen willst, das außerhalb des vektors liegt, schmiert der ab. also vorher gucken ob gewünschtes element kleiner größe des vektors ist.

und mach dir mal keinen kopp, ich helf dir gerne ... ;o)

Geschrieben

und immer brav push back benutzen, weil der dann automatisch speicher reserviert, dann mußt du keine größe bei der deklaration mit angeben.

übrigens kannste vektoren auch verschachteln, kann mitunter nützlich sein: vector< vector<string> >

Geschrieben

Ok, schon mal ein Ansatz (für mich). Aber so wirklich habe ich das immer noch nicht. Also, wenn ich jetzt die erste Zeile aus der Datei xy.tyt auslesen und in einem Vector (muss ich dem einen Namen geben? wie definiere ich den vector?) an der Stelle vecotr[0] speichern will, wie muss ich das machen. Kann ich zum Auslesen weiterhin fgets benutzen? Wenn ja, gebe ich da dann den Vector inkl. der Position (also vector[?]) als das an wo er da speichern soll?

Und wie ist das mit dem Speicher? Muss ich da vorher keine Größe angeben? Muss ich das also dynamisch machen?

Fragen über Fragen!

Bine

Geschrieben

nein, du mußt keine größe mit angeben. einfach nur

vector<typ> vektorname

wenn du dann einen vector vom typen string hast, kannst du auch nur strings anhängen ... soll heißen, wenn du eine zeile mit fgets eingelesen hast, hast du ja n char*, den umwandeln in String, dann an den Vektoren anhängen.

vector<string> datenVektor; // Vektor in dem die Datei gespeichert wrd

string zeilenString; // String der an Vektor gehängt wird

char zeile[800]; // Char Array in den Zeile eingelesen wird

// Einlesen der Datei (zeilenweise):

while ! EOF mach fgets(zeile,....) {

// eingelesene Zeile in String kopieren

zeilenString = zeile;

// den String anhängen

datenVektor.push_back(zeilenString);

}

Die Methode push_back reserviert Speicher für dich. Sie hängt den String (die eingelesene Zeile) immer an das Ende de Vektors.

Wenn du eine Zeile wieder rausholen willst, mußt du direkt auf den Vektor zugreifen:

string bla; // hierin wird die Zeile aus dem Vektor gespeichert

// speichern von Zeile 10:

bla = datenVektor[9];

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...