Dateiverarbeitung in C
Luki 02.06.2003 - 13:00 1420 25
fresserettich
Here to stay
|
Es hat hier keiner Lust, die Hausaufgaben der anderen zu machen. Wenn wer damit nicht zurecht kommt, dann muss er sich halt mehr anstrengen, damit wird ihm niemand weiterhelfen können. Schließlich haben Hausaufgaben den Zweck, dass man das Gemachte nachher kann.
Wenn der Poster zeigt, dass er schon Mühe investiert hat und trotzdem nicht weiterkommt, dann wird ihm auch gern geholfen.
Siehe auch http://www.overclockers.at/showthre...;threadid=52088  ³ 1. war es in der schule und der lehrer hatte selber probs, da er mit unix auch noch nicht so viel am hut hatte  2. hat des keiner gekonnt  3. da luki wollte eine lösung erarbeiten mit einer kombination von c, jedoch brauchten wir dazu eben dieses programm nur gut dass es schon wieder mindestens 3 monate her ist wo wir die dateiverarbeitung im schnellverfahren durchgeamcht haben (ich glaub 2-3 übungen) und wir brauchen des ja täglich bei der vererbung  wir wollten einfach nur ein wenig hilfe, da des hier sonst auch kein problem ist (was gerade ich erfahren durfte, habe zur zeit ärgere probs mit graka etc.) ein bisschen hilfe zu erwarten nur wenn dann solche replays kommen wie es sind 5 zeilen dann bringt uns des nix bin jetzt ca. 4 1/2 monate hier aktiver nutzer und hatte bis jetzt wirklich ein super eindruck von diesem forum, nur die aktion heute war ärger lame vielleicht sind doch nicht alle so w00t in diesem forum wie ich gedacht hatte @all die noch immer flamen wollen --> per pm sonst
|
Ringding
Pilot
|
"Ich such wen, der mir das macht" klingt aber nicht sehr nach ein wenig Hilfe.
|
aNtraXx
trailer park king
|
schau mal in der msdn library falls du dass hast nach
FILE *fp // Filepointer
damit sollte es schon zu schaffen sein. und dann suchst dir noch das zeichen für linefeed aus der asciitabelle. setzt den filepointer aufs erste zeichen SEEK. musst nicht unbedingt. dann liest du per zählschleife einfach zeichen um zeichen ein und prüfst jedesmal ob der eingelesene wert mit dem aus der ascii-tabelle übereinstimmt. wenn ja zählvariable + 1. ansonsten weiter. dass ganze in eine whileschleife verpackt mit abbruchkritieriem EOF.
mit der beschreibung sollte es doch schon ganz leicht gehen.
|
Ringding
Pilot
|
und dann suchst dir noch das zeichen für linefeed aus der asciitabelle. Das muss man nicht suchen, das ist '\n'.
|
M.I.P.S.
Big d00d
|
Würd eher
while(fgets(s, LINE_MAX, file) != EOF) counter++;
vorschlagen.
|
Ringding
Pilot
|
fgets liefert nicht EOF sondern NULL. Außerdem funktioniert es so nicht mit sehr langen Zeilen.
|
aNtraXx
trailer park king
|
Das muss man nicht suchen, das ist '\n'. stimmt  damn.... hab ich glatt vergessen  .
|
fresserettich
Here to stay
|
fgets liefert nicht EOF sondern NULL. Außerdem funktioniert es so nicht mit sehr langen Zeilen. naja laut unseren unterlagen liest fgets bis LF oder EOF aber egal des prob ist ja schon lange erledigt
|
atrox
in fairy dust... I trust!
|
atrox@idefix:/home/atrox > cat lc.c
#include <stdio.h>
// funktioniert nicht, da fgets nach dem buffer vollwerden stehen bleibt, und nicht bis \n weiterliest
void main(void) {
char s[2];
int counter=0;
while (fgets(s,2,stdin)) counter++;
printf("%d\n",counter);
}atrox@idefix:/home/atrox > lc < /etc/passwd
7258
atrox@idefix:/home/atrox > wc -l /etc/passwd
132 /etc/passwd
atrox@idefix:/home/atrox > wc -c /etc/passwd
7258 /etc/passwd
|
M.I.P.S.
Big d00d
|
fgets liefert nicht EOF sondern NULL. Außerdem funktioniert es so nicht mit sehr langen Zeilen. @EOF: Oops, my fault, liefert NULL. @Lange Zeilen: Dafür verwendet man ja LINE_MAX. Ist in der limits.h definiert und gibt an, wie lange eine Zeile im System maximal sein kann. Die Steigerung dafür, für die ganz pedantischen, ist sysconf() aus der unistd.h für die Auswertung der maximalen Zeilenlänge zur Laufzeit.
|
Ringding
Pilot
|
Lame. Die Zeilen können ja trotzdem so lang sein, schließlich gibt es keine Möglichkeit, das zu verhindern. Und dann funktioniert es mit fgets nicht, mit fgetc und zeichenweise auf \n prüfen hingegen schon.
|