Zum Inhalt springen

Zeilennummerierung erkennen??? Und damit arbeiten????


Woodstock

Empfohlene Beiträge

Hallo,

ich habe da eine Frage zwischendurch (also nicht genau zu dem Thema zu dem ich als letztes gepostet habe).

Und zwar will ich Dateinamen mit Pfade in eine Datei Schreiben. Jede Datei eine Zeile, jede Datei nur einmal. Dann will ich Wörter in eine andere Datei schreiben, und dahinter (durch ein Tab getrennt) Zahlen die auf Reihen hinweisen sollen aus der ersten Datei, um zu zeigen in welcher Datei das Wort alles steht.

Beispiel:

Datei xy.txt

c:\bla.txt

c:\personal\blubb.txt

c:\windows\test.txt

Datei ab.txt

Hallo 1 2

bla 2

blubb 2 3

Test 1 2 3

Dann möchte ich in einem anderen Programm die zweite Textdatei durchsuchen lassen (auf ein oder mehrere Worte hin), und mir dann ausgeben lassen können in welchen Dateien das/die Wort/e stehen.

Beispiel:

Hallo c:\bla.txt

Test c:\bla.txt c:\personal\blubb.txt c:\windows\test.txt

Wie kann ich das machen?

Also im Moment sieht es so aus das ich die Datei-Datei soweit fertig habe, jede Datei steht in ihrer eigenen Zeile, und auch bloß einmal.

Jetzt habe ich die Wörter die in dieses Dateien vorkommen. Hatte ich das Wort noch nicht, soweit kein Problem. Ich schreibe ans Ende der Datei-Datei die Datei mit Pfad, und Das Wort in die andere Datei. Nur wie weiß ich welche Zahl ich dahinter schreiben muss :( .

Oder noch schlimmer, ich hatte das Wort schon mal :eek: (wird in meinem Programm zuerst nach gesehen ob es schon mal da war, und dann darauf hin weiter gearbeitet, endweder so, oder so). Wie kann ich jetzt dahinter schreiben das es auch noch in 'der und der' Datei vorkommt :confused: ?

Hier mal mein Quelltext falls das Wort noch nicht vorkam

 #include "Sabine(1).h"

void Schreiben(FILE *FW, FILE *FY, char *szAusgelesenes, long& nScnt, char *
{
/* Ich bekomme aus der Funktion vorher zwei Dateien geöffnet durch die Pointer *FW
und *FY übergeben. In diese beiden Dateien kann ich jeweils ans Ende schreiben.
Durch b bekomme ich die Datei die gerade auf Wörter hin durchsuche inkl. Pfad übergeben
szAusgelesenes ist das Wort, welche ich aus dieser Datei ausgelesen habe. nScnt (war
früher mal ein Integer, derswegen nScnt, und nicht lScnt) ist eine Zählervariable die
eine andere Aktion gedacht ist, hierfür aber nicht wichtig. */

int nX, nPos;
bool fFound=false;
char szBuffer[501]={NULL};

fseek(FY, 0, SEEK_SET);
fwrite(szAusgelesenes, sizeof(char), strlen(szAusgelesenes), FW);
fwrite("\n", sizeof(char), strlen("\n"), FW);
fFound=false;
nPos = 0;
while(nX != EOF) // Dateiname mit Pfad wird aus der Datei ausgelesen um zu schaun ob die Datei bereits einmal vorkam
{
fFound = false;
nX = fgetc(FY);
if(nX!=-1)
{
if (nX == 10)
{
if(strlen(szBuffer)>1)
{
szBuffer[nPos] = '\0';
_strlwr(szBuffer);
_strlwr(;
nPos = 0;
} // if
if(strstr(b, szBuffer)!=0) // kam die Datei schon mal vor fFound = true -> derDateiname und Pfad wird nicht
{ // erneut in die Datei geschrieben
fFound = true;
cout << "true\n";
}
} // if
else
{
szBuffer[nPos] = nX;
nPos++;
} // else
} // if
if(fFound == true)
break;
} // while
if(fFound==false)
{
fwrite(b, sizeof(char), strlen(, FY); // Dateiname wird mit Pfa in die Datei geschrieben,
fwrite("\n", sizeof(char), strlen("\n"), FY); // danach ein Zeilenumbruch gemacht
}
nScnt++;
} [/PHP]

Tja, wie kann ich denn nun noch die dazugehörige Zahl ans Ende anfügen, und vorallem, wie mache ich es, wenn das Wort schon einmal da war,, ich also nur die Zahl anfügen muss, und mehr nicht?

Hiiiiiilfe!!!!!!

[color=indigo]Bine[/color]

Link zu diesem Kommentar
Auf anderen Seiten teilen

also wenn ich das richtig verstehe, willst Du eine Art Datenbank anlegen, in der alle Wörter aufgesammelt werden, die in irgendwelchen Dateien vorkommen.

Ich hätte da einen etwas anderen Lösungsvorschlag.

Warum legst Du nicht ganz einfach eine Datenbank an Files an.

Für das Wort Hallo die Datei "\data\Hallo.fil" darin kommen alle Dateien die das Wörtchen Hallo beinhalten samt den Zeilennummern, in der das Wort vorkommt.

Die Datei "Hallo.fil" könnte dann folgenden Aufbau haben:

[Datei_A.txt]

1

2

3

4

[Datei_B.txt]

2

3

4

5

Du ließt dann die Datei aus und brauchst einfach durch eine kleine IF-Anweisung die Zeilennummer anfügen.

Dafür musst Du aber eine Zwischendatei anlegen "\tmp\Hallo.fil"

in der Du deine Daten abspeicherst.

In "\data\Hallo.fil" werden die Daten gelesen und in "\tmp\Hallo.fil" gespeichert.

Wenn Du die Änderungen gemacht hast brauchst Du nur noch die in "\tmp" stehende "Hallo.fil" Datei kopieren und fertig isses.

Das ist vielleicht nicht die beste Lösung für Dein Problem (ich würde dies nämlich über Struct-Anweisungen machen) aber die wohl am nachvollziehbare Lösung.

Gut, die schnellste isses auch nicht gerade aber für einen Anfänger-Programmierer woll nicht schlecht geeignet.

Hier mal ein wenig Code zu den was ich gesagt habe:

Die Datei Hallo.fil hat folgenden aufbau:

[C:\Datei_A.TxT]

1

6

7

8

[C:\Datei_B.TxT]

1

10

33

20

Hier nun der Code:

-----

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(int argc, char **argv)

{

char buffer[500];

char datei[300];

char next[500];

bool eingefuegt = false;

FILE *data, *tmp;

data = fopen("hallo.fil","r");

tmp = fopen("hallo.tmp","w");

if (!data)

{

printf("Fehler beim â„¢ffnen von 'Hallo.fil'.");

exit(1);

}

fseek(data,0,SEEK_SET);

while (fgets(buffer,499,data) != NULL)

{

int len = strlen(buffer);

while (--len >= 0) {

if (buffer[len] == '\n') { buffer[len] = 0; continue; }

if (buffer[len] == '\r') { buffer[len] = 0; continue; }

}

if (sscanf(buffer,"[%s]",&datei) == 1)

{

strcat(buffer,"\n");

fwrite(buffer,strlen(buffer),1,tmp);

while(fgets(buffer,499,data) != NULL)

{

if (!strcmp(buffer,"\n")) continue;

if (sscanf(buffer,"[%s]",&datei) == 1)

{

eingefuegt = false;

break;

}

// ----------------------------------

// ab hier wird eine neue Zeilenummer

// eingefÂgt ...

// ----------------------------------

int zeilennr = atoi(buffer);

int einfuegenr = 4;

if (zeilennr > einfuegenr && eingefuegt == false)

{

char p[200];

sprintf(p,"%d\n",einfuegenr);

fwrite(p,strlen(p),1,tmp);

eingefuegt = true;

fwrite(buffer,strlen(buffer),1,tmp);

continue;

}

fwrite(buffer,strlen(buffer),1,tmp);

continue;

}

}

// Rest der Datei schreiben ...

strcat(buffer,"\n");

fwrite(buffer,strlen(buffer),1,tmp);

}

fclose(data);

fclose(tmp);

system("copy hallo.tmp hallo.fil");

}

------

Die Datei Hallo.tmp müsste nach Aufruf des Programms folgenden Aufbau haben:

[C:\Datei_A.TxT]

1

4

6

7

8

[C:\Datei_B.TxT]

1

10

33

20

Dieser Code dient nur als Demonstration was man so alles machen kann. Verfeinert werden muss er auf alle Fälle noch.

good luck

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...