C da war doch mal was

Hallo Leute,

ich bin eigentl. VB Programmierer, ich habe vor zich Jahren mit C/C++ mal was gemacht, aber es ist zu lang her, ich bräuchte mal ein bisschen Hilfe.
Ich bin dabei ein C Programm auf Unix zu schreiben:
Das Programm so eine Datei öffnen, eine Zeile auslesen und diese dann weiter verarbeiten. Dann gehts weiter mit der nächsten Zeile der Datei.

Okay, das öffnen der Datei funktioniert schon super*lach* ich lese dann alle Zeichen aus und gebe sie auf dem Monitor aus/ bzw. schreibe sie wieder in eine Datei.

#include
#include
main ()

{
FILE *dat_ein;
FILE *dat_aus;
char ch[255];
int i;
fflush(stdin);
dat_aus=fopen(„test_aus.txt“,„w“);
if ((dat_ein=fopen(„test.txt“,„rb“))==NULL)
{
fprintf(stderr,„Datei nicht okay\n“);
}
fgets(ch,100,dat_ein);
fprintf(dat_aus,"%s",ch);
fseek(dat_ein,0,SEEK_SET);
while (!feof(dat_ein))
putchar(fgetc(dat_ein));

fclose(dat_ein);

}

So ich möchte nun aber prüfen wann das ende der Zeile erreicht ist, das wird ja normal mit ASCII 13 markiert. Ich lasse also eine schleife laufen bis ASCII 13 ist und dann alles vorher z.B. in eine Variable. Dann weiter mit der nächsten Zeile.

Wie kann ich aber das Zeichen, was per fgetc kommt, prüfen ob es ASCII 13 ist … in VB würde ich sagen „if asc(zeichen)=13 then …“ ich habe aber keine Idee wie ich das in C hinbekomme.

Viell. hat mal jemand einen Denkanstoss für mich oder einen Beispielcode … da lässt es sich dann schön probieren.

Danke für Eure Hilfe

Gruss Alex

Hallo Alex,
ich dacht VB - Programmierer sind eigentlich gar keine Programmierer :wink: nein spaß :wink:

Also wenn du die datei mit fgets ausliest hast du das problem das du die zeichenkette nachträglich parsen musst. im sinne von

for(i=0; i

man könnte aber auch das programm so umgestalten das du gleich einfach nur zeichen ausliest



    
    char ch;
    
    while((ch = getc(File)) != EOF)
    {
     if(ch == 13) // bin mir auch nicht sicher obs unter unix nicht auch 13 10 ist? alle carage return / line feet ist?
     {
     }
    }




verzeihe bitte eventuelle syntax und oder rechtschreibfehler :wink:


> <small>[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]</small>

Hallo.

Wie kann ich aber das Zeichen, was per fgetc kommt, prüfen ob
es ASCII 13 ist … in VB würde ich sagen „if asc(zeichen)=13
then …“ ich habe aber keine Idee wie ich das in C
hinbekomme.

if (zeichen == 13) {
 printf("Das Zeichen ist ASCII 13.\n");
}

Sebastian.

Hallo Steffen,

ich glaube auch langsam dran, wenn ich mich hier in den C - Code einfuchsen muss, dass Visual Basic Programmierer eigentlich keine Programmierer sind *lach* man ist im Visual Basic einfach zu verwöhnt, das ist alles.

Er schwerend kommt hinzu, das ich gerade auf Unix ohne Debugger arbeiten muss, ich tippe den Quelltext im „vi“, und dann compiliere ich das teil und hoffe das keine Fehler kommen, wenn dann wieder mit dem vi in den Quelltext korrigieren und neu compilieren … dann ausfuhren und hoffen es klappt :wink:

Wie schön ist doch ein Debugger, um in Einzelschritt durch den Code zu gehen !!! Bin schon am Überlegen, ob ich im Visual Studio nackt den Code programmiere, teste und dann portiere (Pfade umschreiben etc.pp) und dann auf Unix kompiliere.

Oder kannst du mir eine gute IDE auf Linux empfehlen?

Danke für deinen Tipp, werd ich gleich mal checken!

Gruss Alex

Hi Sebastian,

danke für den Tipp, werd ich gleich mal checken!

Gruss ALex

Hallo Steffen,

ich glaube auch langsam dran, wenn ich mich hier in den C -
Code einfuchsen muss, dass Visual Basic Programmierer
eigentlich keine Programmierer sind *lach* man ist im Visual
Basic einfach zu verwöhnt, das ist alles.

Ich programmiere in letzter Zeit C#, das ist auch um einiges angenehmer :wink:

Er schwerend kommt hinzu, das ich gerade auf Unix ohne
Debugger arbeiten muss, ich tippe den Quelltext im „vi“, und
dann compiliere ich das teil und hoffe das keine Fehler
kommen, wenn dann wieder mit dem vi in den Quelltext
korrigieren und neu compilieren … dann ausfuhren und hoffen
es klappt :wink:

Das kenne ich mache im moment einen Kurs an der Uni Programmieren auf Linux :wink: Und der vi ist auch einfach hart :wink:

Wie schön ist doch ein Debugger, um in Einzelschritt durch den
Code zu gehen !!! Bin schon am Überlegen, ob ich im Visual
Studio nackt den Code programmiere, teste und dann portiere
(Pfade umschreiben etc.pp) und dann auf Unix kompiliere.

Das habe ich auch öfters gemacht :wink: Das geht gut wenn man nur einzellne Abschnitte hat. Und dann per mail an den Linux rechner :wink:

Oder kannst du mir eine gute IDE auf Linux empfehlen?

Leider nicht bin aber öffen. Aber ich glaube da gibts was komme aber grad nicht auf den namen!

Danke für deinen Tipp, werd ich gleich mal checken!

Kein Problem

Gruß Steffen

Hallo Steffen,

der „dumme VB Programmierer“ hat es hinbekommen, nagut, nachdem ich ein paar mal ein SEGMENTATION FAULT oder unter Microsoft-Compiler „Access Violation“ programmiert habe, lief es dann, es war:

if (ch ==’\n’)

mit 10 oder 13 hats unter Unix nicht geklappt.

Nagut, das war ja erstmal der Anfang, das ich mit den Dateien unter Unix arbeiten kann, jetzt muss ich noch die Zeilen logisch getrennt , mir schwebt Semikolon vor, einlesen und umrechnen und dann ausgeben.
Also war das nur der spielerische Anfang *g*

Aber ich habe langsam „blut geleckt“ …

Danke für deine Hilfe.

Gruss Alex

Hallo Alex.

Ich bin dabei ein C Programm auf Unix zu schreiben:

So ich möchte nun aber prüfen wann das ende der Zeile erreicht
ist, das wird ja normal mit ASCII 13 markiert.

Achtung: Zeilenenden sind betriebssystemspezifisch.
Unter Unix/Linux wird das Zeilenende mit einen Line Feed
(= ASCII 10 ) codiert. Die ASCII 13 ist dagegen ein Carriage Return.

Eine Diskussion dazu findest Du auch unter
http://www.wer-weiss-was.de/cgi-bin/forum/showarchiv…

Gruß,
-Andreas.

Hallo Alex

Ich bin dabei ein C Programm auf Unix zu schreiben:
Das Programm so eine Datei öffnen, eine Zeile auslesen und
diese dann weiter verarbeiten. Dann gehts weiter mit der
nächsten Zeile der Datei.

Also Du willst mit der „ersten“ Zeile
was anderes machen als mit den folgenden
Zeilen?

So ich möchte nun aber prüfen wann das ende der Zeile erreicht
ist, das wird ja normal mit ASCII 13 markiert. Ich lasse also
eine schleife laufen bis ASCII 13 ist und dann alles vorher
z.B. in eine Variable. Dann weiter mit der nächsten Zeile.

Viell. hat mal jemand einen Denkanstoss für mich oder einen
Beispielcode … da lässt es sich dann schön probieren.

Das brauchst Du *gar nicht* und solltest es auch
gar nicht tun. Ein ‚fgets()‘ liefert Dir
mit jedem Aufruf eine weitere Zeile in
einem Puffer. In diesem Puffer steht das,
was vorher in der Datei stand.

Es gibt keine Möglichkeit, in der Datei etwas
anderes vorzufinden, als im Puffer. Daher schlage
ich Dir vor, eine „idiomatische“ Einleseschleife
zu programmieren - also so, wie man das üblicherweise
macht - und anhand der Nummer der eingelesenen
Zeile zu entscheiden, was zu tun ist, z.B.:

 #include 
 #include 
 #include 

 int main(int argc, char \*\*argv)
{
 char name\_ein[] = "test.txt";
 char name\_aus[] = "test\_aus.txt";
 FILE \*f\_ein;
 FILE \*f\_aus;
 char puffer[1024];
 int nlines = 0;
 
 if( (f\_ein=fopen(name\_ein, "r")) == 0 ) {
 perror("name\_ein");
 exit(1);
 }
 
 if( (f\_aus=fopen(name\_aus, "w")) == 0 ) {
 perror("name\_aust");
 exit(1);
 }

 while( fgets(puffer, sizeof(puffer), f\_ein) != 0 ) {
 if(nlines == 0) {
 fputs(puffer, f\_aus);
 }
 else {
 fprintf(f\_aus, "Zeile %d hat %d Zeichen\n", nlines+1, strlen(puffer));
 }
 nlines++;
 }
 
 fclose(f\_ein);
 fclose(f\_aus);

 return 0;
}

Solche oder ähnliche Schleifen wirst Du
immer wieder finden. Was zu überlegen ist
wäre noch, ob Du die Dateien ‚binär‘ („wb“/„rb“)
oder ‚textual‘ („w“/„r“) verwenden willst,
unter Win macht das z.B. einen Unterschied.

Allerdings ist das fgets imho von alleine
so clever, sowohl \r\n als auch \n korrekt
als „Zeilenende“ zu betrachten. Darum brauchst
Du Dich also eigentlich gar nicht zu kümmern.

Oder habe ich Deine Intention falsch verstanden?

Ausserdem: Die alte „Visual-Studio98“ (Service-Pack 5) IDE
ist imho ausgezeichnet geeignet, um Programme für das Ziel
„Unix/Linux“ zu entwickeln, so lange Du „Konsolenapplikation“
wählst und keinerlei Win32-Zeugs verwendest (das merkst Du
dann schon :wink:

Es gibt unter Linux/Unix imho keine IDE, die
im Komfort auch nur in die Nähe kommt.

Grüße

CMБ

Hallo,

Er schwerend kommt hinzu, das ich gerade auf Unix ohne
Debugger arbeiten muss, ich tippe den Quelltext im „vi“, und
dann compiliere ich das teil und hoffe das keine Fehler
kommen, wenn dann wieder mit dem vi in den Quelltext
korrigieren und neu compilieren … dann ausfuhren und hoffen
es klappt :wink:

*urgs*

Glaubst Du im Ernst, unter Unix würde ohne Debugger und vernünftige Editoren programmiert? Mann mann mann. Also, anstelle des vi nimmt man natürlich den Emacs im C mode :smile: Dann hat man von da aus Zugriff auf diverse Funktionen, u.a. den Aufruf des GNU Debuggers gdb.

Oder kannst du mir eine gute IDE auf Linux empfehlen?

Wie wäre es mit KDevelop oder Eclipse?

Es gibt mindestens drei Sack voll IDE für Linux/Unix. Google doch einfach mal.

Gruß

Fritze