Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 10:06

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Tabs durch leerzeichen ersetzen

Discussion on Tabs durch leerzeichen ersetzen within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Apr 2008
Posts: 15
Received Thanks: 1
Tabs durch leerzeichen ersetzen

Hallo,

ich würde gerne Tabulatoren aus einer Datei in Leerzeichen umwandeln und natürlich auch immer die entsprechende Anzahl an Leerzeichen, weil diese ja nicht immer gleich sind.
Das ganze soll aber NUR in C geschehen und nicht in C++ und ich würde dafür auch keine extra Funktion benutzen, falls es eine gibt.

Das habe ich derzeit aber ich komme bei der Stelle mit dem Ersetzen einfach nicht weiter.

Code:
void MyReplace(FILE *file)
{
    int currChar = 0;
   
    if (file != NULL)
    {
        while((currChar = fgetc(file)) != EOF)
        {
            if(currChar == '\\') 
            {
                currChar = fgetc(file);
               
                if(currChar == 't') // 
                {
                    // Hier ist das Problem
                }
                else
                {
                    putchar(92); // == \
                    putchar(currChar);
                }
            }
            else
            {
                putchar(currChar); // Andere Zeichen ausgeben
            }
        }
    }
}
GeKiller is offline  
Old 12/21/2014, 05:04   #2


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Da hast du etwas missverstanden. \t ist die Escape-Sequenz, die dein Compiler interpretiert und in das Tabulatorzeichen umwandelt. In der Datei steht eben genau dieses und nicht "\t".
Daher kannst du einfach das hier schreiben:

Code:
if(currChar == '\t')
Wobei man bedenken müsste, dass diese Herangehensweise nicht mit Unicode-Texten klarkommt.

Hier mal der ganze Code:

Code:
void MyReplace(FILE *file, int spaces_per_tab)
{
    int currChar = 0;
   
    if (file != NULL)
    {
        while((currChar = fgetc(file)) != EOF)
        {
            if(currChar == '\t') 
            {
                for (int i = 0; i < spaces_per_tab; i++)
                {
                	putchar(' ');
                }
            }
            else
            {
                putchar(currChar); // Andere Zeichen ausgeben
            }
        }
    }
}
MrSm!th is offline  
Old 12/21/2014, 12:53   #3
 
elite*gold: 0
Join Date: Apr 2008
Posts: 15
Received Thanks: 1
Das ist ja genau das Ding.

In der Datei stehen in dem Fall aber \t und so funktioniert das dann ja leider nicht? Zudem hat ein Tabulator ja nicht unbedingt immer nur 8 Leerzeichen, sondern manchmal sind es halt nur 3 bis zum nächsten Tabstop.
Wenn man auf die Tabulator Taste drückt fährt er ja immer zur nächsten durch 8 teilbaren Position fort.

Nur wie kann ich das berücksichtigen?
Damit komme ich grad absolut nicht weiter.
GeKiller is offline  
Old 12/22/2014, 12:49   #4
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Code:
void tabReplace(FILE *file)
{
    int currChar = 0;
    int i;
    int zaehler=0;
    if (file != NULL)
    {
        while((currChar = fgetc(file)) != EOF)
        {
            if(currChar == '\\' && fgetc(file)=='t')
            {
            int tmp = 8-(zaehler%8);
               for(i = 0; i<tmp; i++){
               putchar(' ');
               zaehler++;
               }
            }
            else
            {
                if(currChar == '\n'){
                zaehler=0;
                putchar(currChar);
                }else{
                zaehler++;
                putchar(currChar);
                }
            }
        }
    }
}
#Edit: Hatte noch ein Problem, falls ein Backslash kam und dann ein anderen Zeichen als "t" dahinter.
So sollte es dann gehen:

Belur is offline  
Reply


Similar Threads Similar Threads
Mobs durch andere ersetzen?
07/24/2013 - Metin2 Private Server - 6 Replies
Wie kann ich z.B einen Sensemann durhc einen Azrael ersetzen? Gruß.
[HowTo] Map durch Ebene ersetzen
07/26/2012 - Last Chaos - 17 Replies
Hallo Community, Nach längerer Zeit mal wieder etwas nützlicheres von mir: Diesmal erkläre ich euch, wie ihr eine beliebige Map durch eine leere Ebene ersetzen könnt. Was das für Vorteile hat? Diese kommen vor allem Bot-Nutzern entgegen, da der Bot nicht mehr an Ecken oder Kanten hängenbleiben kann. Aber auch denjenigen unter euch, die einfach in aller Ruhe leveln möchten, und nicht an Begrenzungen durch die Map (zum Beispiel Seelenturm) gebunden sein möchten, kann diese Möglichkeit...
Pferd durch reittier ersetzen?
01/01/2011 - Metin2 Private Server - 8 Replies
Heyho, Wollte mal fragen wie man die neuen reittiere durch beispielsweise ein Kg ersetzen kann ich hab mal ein bisschen im 2010 client geguckt und npc.eix und epk entpackt und npc2 eix und epk aber nur das pony als leader member oder gildenlos gefunden wo sind die dds datein von den neuen reittieren und mg und kg ? hab dort nur gr2 datein gefunden vom mg und kg und ich nicht die neuen reittiere neben pferden haben :D ich will sie DURCH DIE PFERDE ERSETZT HABEN ! pls help
Pferde durch reittiere ersetzen
09/30/2010 - Metin2 Private Server - 4 Replies
hi ich wollte hier mla was fragen kan man seine pferde durch die neuen reittieren ersetzen? ichab in der sufu gesucht, hab aber nicthz gefunden ich hatte mir das so gedacht
[HowTo]NPC's durch Monster ersetzen
04/22/2010 - Metin2 PServer Guides & Strategies - 12 Replies
Hy Com... Falls es so einen Thread schon gibt dann bitte meinen hier closen Zum TuT: Was man dafür braucht?



All times are GMT +2. The time now is 10:06.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.