Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Bearbeiten verschiedener Dateien

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.05.2004, 14:24 Uhr
~Jerry
Gast


Hallo, ich bin eigentlich noch ziemlicher C-Neuling und daher hoffe ich, dass mir jemand aus dem Forum helfen kann.
Und zwar habe ich folgendes Problem. Ich habe von der Schule als Aufgabe bekommen, ein Programm zu schreiben, welches aus einer Datei einliest:

Code:
peter     17 Jahre    köln            //So sieht die eingelesene Datei aus
franz      19 Jahre    düsseldorf    //z.B. Test.txt
kay        20 Jahre    essen         // 2 ist z.B. Gruppe 2



Diese soeben eingelesene Datei soll vom Programm standardgemäss und bei jeder Ausführung eingelesen werden.
Soweit ist ja alles ganz in Ordnung. Aber wie kann ich es jetzt machen, dass zusätzlich im Programm eine weitere Datei angegeben wird, welche z.B. so aussieht.

Code:
//aendern.txt
peter      20 Jahre      
kay        bochum      



die werte, die in der 2.Datei ("aendern.txt") gespeichert sind sollen später in der 1. Datei auftauchen.
Also im Prinzip soll es so ablaufen.
- zuerst soll Test.txt eingelesen werden
- dann die Datei aendern.txt
- wenn die aendern.txt leer ist soll nichts getan werden,
- wenn die Datei nicht leer ist, dann sollen alle Werte der Test.txt geändert werden.
- z.B. steht anfangs in Test.txt, dass peter 17 ist und aus köln kommt,
in der aendern.txt steht aber peter 20 Jahre. Nun soll quasi in der Original- datei (Test.txt) aus der 17 eine 20 gemacht werden und die geänderte Datei soll dann in out.txt gespeichert werden.
Das mit dem Dateien einlesen und so klappt ja eigentlich ganz gut, aber wie mach ich dem klar, dass wenn in der aendern.txt ein Eintrag (oder mehrere) drin ist, der auch getauscht werden soll (und auch nur der Wert, z.B. Köln soll nicht geändert werden, nur das Alter)
Wie kann ich da ran gehen, habe echt keinen blassen Schimmer.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.05.2004, 14:31 Uhr
Pablo
Supertux
(Operator)


Genauso wie bei der ertsen Datei!

Tipp: benutze fscanf oder sscanf, wenn du das Format der Zeilen kennst!

Da es HA ist, werde ich nix mehr dazu sagen, bevor du postest, was du schon gamcht hast bzw. was du dir dafür überlegt hast.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.05.2004, 15:41 Uhr
~Jerry
Gast


Mal davon abgesehen ist das doch nur eine freiwillige HA.
Angefangen habe ich ja auch schon.
Zuerst habe ich die Test.txt, die immer eingelesen werden soll, mit fgets eingelesen und nur die Zeilen genommen, die ich wirklich brauche.
Das klappt bis hierhin auch. Dann lese ich die zweite Datei ebenfalls mit fget ein. Aus dieser Datei brauche ich auch nicht jede Zeile, also habe ich da ne while-schleife rum gemacht, die dafür sorgt, dass auch wieder nur die wichtigen Zeilen in einer Variable gespeichert werden. Das klappt auch.
Anschließend habe ich ein kleines Tool geschrieben, welches die Out-Datei einen Namen zuweist und dann in der Datei ***.txt abspeichert. (Speichert aber immer noch den nicht veränderten String aus Test.txt)
Meine Probleme gehen jetzt erst richtig los.
Wie gehts jetzt weiter. Wie kann ich erst auswerten was in der aendern.txt steht und anschließend in der Test.txt genau diese Sachen ändern. Ich habe echt keinen blassen Schimmer, deshalb poste ich ja an der Stelle.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.05.2004, 18:07 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wie du da rangehen solltest hängt insbesonder davon ab ob du es in c oder in c++ machen willst...

mach dir ein struct das einen datensatz darastellst.... in ein array dieses structs allerst du dann wie pablo schon meinte mit fscanf die datensätze rein...

wenn du nun ändern willst liest du eine zeile ein und suchst nach dem namen in deinem datenbankarray... wenn du ihn findest änderst du den entsprechenden parameter....
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 10.05.2004 um 18:08 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.05.2004, 08:43 Uhr
ao

(Operator)



Zitat:
~Jerry postete
Wie kann ich erst auswerten was in der aendern.txt steht und anschließend in der Test.txt genau diese Sachen ändern.


Wie hast du die Daten strukturiert, die du aus Test.txt einliest (die vollständigen Datensätze)? Wahrscheinlich jeden Datensatz in ein struct und davon ein ganzes Array, oder? Zeig mal die Definition von dem struct und dem Array, damit wir alle über dasselbe reden.

Die Einträge in Aendern.txt bestehen immer aus einem Namen und dazu ein Alter oder ein Ort, richtig? Dann könnte das Vorgehen sein:

1. Einen Datensatz einlesen
2. Den Namen speichern
3. Erkennen, ob ein Alter oder ein Ort da steht (Alter = Zahl + "Jahre", Ort = Text ohne Ziffern)
4. Diese Information zusammen mit dem Namen speichern, und das jeweils andere Feld als ungültig kennzeichnen. Z.B. Alter auf -1 oder Ort auf "" setzen.
5. In dem Array, das aus Test.txt gelesen wurde, nach dem Eintrag mit demselben Namen suchen (Zum Prüfen von Zeichenketten auf Gleichheit gibt es die Funktion strcpy).
6. Wenn der Eintrag gefunden wurde, das Alter bzw. den Ort ersetzen.
7. Diese Schritte für alle Einträge in Aendern.txt wiederholen
8. Am Ende die Daten nach out.txt schreiben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.05.2004, 08:58 Uhr
Hakuna



MUSS es denn unbedingt eine *.txt sein?
alles was mit solchen datensätzen zu tun hat, würde ich in binäre dateien Speichern...
Ist zumindest meiner meinung nach einfacher, weil du dann ja einfacher mit datensatzindex arbeiten kannst, oder?
@ao

Zitat:
(Zum Prüfen von Zeichenketten auf Gleichheit gibt es die Funktion strcpy).

Stimmt zum vergleichen nicht strcmp?
Will mein wissen aber echt nicht gegen deines messen
--
Gruß, Hakuna
....und das Schlimmste ist du merkst es einfach nicht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.05.2004, 09:34 Uhr
~Jerry
Gast


Also, ich habe das mit dem Namen und alter eigentlich nur als Beispiel genommen. In Wirklichkeit sieht das alles ein bißchen anders aus. Und zwar:
Meine Test.txt bzw. Test.inp, die ja immer eingelesen wird sieht wie folgt aus.
Sie hat eigentlich immer nur zwei Werte die durch ein = getrennt sind z.B.:

Code:
1    A_ID=4543
      B_ID=67857
      C_ID=676
      D_ID=
      E_ID=6788
2    A_ID=67678
......


die ID´s sind auch nur Beispiele, da könnte verschiedener Text stehen.

Und meine aendern.txt bzw. aendern.inp sieht so aus:
Sie enthält z.B. die nötige Nummer (die, die vor den ID´s steht)und den String bzw. den Wert der geändert werden soll. z.B:

Code:
1    B_id=5
1    D_id=7777


Diese beiden Dateien werden mit einem einfachen fgets eingelesen und bereits wieder ausgegeben (so wie in dem Bsp. oben).
Und jetzt soll geguckt werden, ob es sich in dem Testfile um die Nummer 1 handelt, ob dort z.B. ein Eintrag ist mit B_id, und wenn ja, dann soll dieser eintrag im Testfile geändert werden und in einer externen Datei gespeichert werden (z.B. out.txt bzw. out.inp)
Hoffe die Aufgabe wurde jetzt einigermaßen verständlich rübergebracht und hoffe auf evtl. schnelle Hilfe.
P.S.: Ich programmiere in reinem ANSI-C
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.05.2004, 12:23 Uhr
ao

(Operator)



Zitat:
Hakuna postete
MUSS es denn unbedingt eine *.txt sein?
alles was mit solchen datensätzen zu tun hat, würde ich in binäre dateien Speichern...
Ist zumindest meiner meinung nach einfacher, weil du dann ja einfacher mit datensatzindex arbeiten kannst, oder?
@ao
[quote](Zum Prüfen von Zeichenketten auf Gleichheit gibt es die Funktion strcpy).

Stimmt zum vergleichen nicht strcmp?[/quote]
Natürlich, du hast recht. Hab nicht aufgepasst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.05.2004, 12:50 Uhr
ao

(Operator)



Zitat:
~Jerry postete
Also, ich habe das mit dem Namen und alter eigentlich nur als Beispiel genommen. In Wirklichkeit sieht das alles ein bißchen anders aus.

Ächz! Warum konstruierst du denn derart aufwändig ein falsches Beispiel, das mit der Aufgabe nicht das Geringste zu tun hat? Damit hast du uns alle in die völlig falsche Richtung geschickt.

Wenn dir jemand ne Lösung gegeben hätte, was hättest du damit anfangen können? Denkst du, wir haben nichts besseres zu tun?

Zitat:

die ID´s sind auch nur Beispiele, da könnte verschiedener Text stehen.


Schon wieder nur die halbe Wahrheit?!? Was soll diese Geheimniskrämerei, programmierst du fürs Pentagon? Denkst du, dein Lehrer liest hier mit und erkennt seine Aufgaben wieder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.05.2004, 13:45 Uhr
~Jerry
Gast


Sorry, wegen dem blöden Beispiel...
Zu den ID's, die jetzt immer noch Beispiele sind, kann ich nur sagen, dass diese ID`s auf jedem Fall auch ID's bleiben werden. Z.B. steht in meinem Code höchstens anstatt A_ID --> Automatical_ID oder so. Nichts wildes. Nur bei teilweise bis zu 1000 Zeilen, kann ich nur mit Beispielen arbeiten...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: