Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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]

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

@Paule22:

Geht nicht, weil das nicht meine Aufgabe ist. Ich soll das Problem auf diese Weise lösen, also muss ich das auch machen.

Bine

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.