Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Punkte aus Dateinamen entfernen (Zeichenketten)

Schreiben Sie ein Programm oder Skript, das Punkte durch ein Leerzeichen ersetzt, aber nicht den Punkt vor der Datei-Erweiterung. Lesen Sie hierfür die Dateinamen aus einem Ordner aus.

Beispiele:

  • Hallo.du.txt  >  Hallo du.txt
  • CMakeLists.txt  >  CMakeLists.txt
  • Test  >  Test
  • Das.ist.ein.Test.txt  >  Das ist ein Test.txt

Zusatz:

  • Das Programm so schreiben, dass es auch auf einzelne Dateien angewendet werden kann.
  • Das Programm so schreiben, dass man die durch das Leerzeichen zu ersetzende Zeichen als Parameter an das Programm übergeben kann.

1 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

gressly 16. Januar 2014 22:01   reply report
Gerade als Programmierer sind wir natürlich froh, wenn es keine Leerschläge in den Dateinamen hat, denn die Shell-Scripts haben damit ihre liebe Mühe. In der Praxis wird wohl eher das Umgekehrte verlangt: Ersetze alle Leerschläge, Sonderzeichen und Umlaute durch einen Bodenstrich (Underscore) '_'. Doch dann wird die Aufgabe viel einfacher.

Daher ist die Aufgabe, so wie sie hier steht, sicher viel spannender. Wie entscheiden wir nämlich, was die Dateierweiterung ist bei Filenamen wie "XY.java", "File.2014_backup", '2443_###' und so weiter. Hier würde ich der Einfachheit halber schreiben: "Der Letzte Punkt (falls vorhanden) gehört zur Dateierweiterung und darf nicht ersetzt werden."

8 Lösung(en)

#!/usr/bin/env python3

import os, sys, getopt

def show_usage():
	print("""\
Usage: rmp.py [OPTION]
Remove all dots from file or files within a directory except extention dot.

  -h            Display the usage message.
  -f file       Path to the file where all dots will be remove.
  -d directory  Path to the directory where all dots will be removed.
""")

def main(argv):
	try: 
		opts, args = getopt.getopt(argv,"hf:d:")
	except getopt.GetoptError:
		show_usage()
		sys.exit(1)

	for opt, arg in opts:
		if opt in ('-h', '--help'):
			show_usage()
			sys.exit(0)
		elif opt in ('-f', '--file'):
			path = arg
			kind = opt[1]
		elif opt in ('-d', '--directory'):
			path = arg
			kind = opt[1]

	if kind == 'd':
		dir = os.listdir(path)

		for file in dir:
			newfile = file.replace('.', ' ', file.count('.')-1)
			print(file + ' -> ' + newfile)
			os.rename(file, newfile)

	elif kind == 'f':
		file = path
		newfile = file.replace('.', ' ', file.count('.')-1)
		print(file + ' -> ' + newfile)
		os.rename(file, newfile)

if __name__ == "__main__":
	main(sys.argv[1:])
                

Lösung von: Matthias Sayler (Bosch)

import java.util.Scanner;
import java.util.regex.Pattern;

public class Class {

    // trennt den Dateipfad bei jedem enthaltenem splitter und löscht diesen
    private String[] split(String datapath, String splitter) {
        return datapath.split(Pattern.quote(splitter));
    }

    // Hauptmethode
    public static void main(String[] args) {
        // Dateipfad wird abgefragt und eingelesen
        System.out.println("Geben Sie den Pfad an:");
        String datapath = new Scanner(System.in).nextLine();

        // Trennzeichen wird eingelesen und array wird mit dem zerteilten
        // Dateipfad bestückt
        System.out.println("Geben Sie das Trennzeichen an:");
        String[] array = new Class().split(datapath, new Scanner(System.in).nextLine());

        // enthällt am Ende den neuen String
        String str = "";

        // fügt Leerzeichen ein
        for (int i = 0; i < array.length - 2; i++) {
            array[i] = array[i] + " ";
        }

        // fügt den Punkt vor dem Dateiende an
        if (array.length != 1) {
            array[array.length - 1] = "." + array[array.length - 1];
        }

        // stellt den neuen String her
        for (int i = 0; i < array.length; i++) {
            str = str + array[i];
        }

        // gibt das Ergebniss aus
        System.out.println(str);
    }

}
                

Lösung von: Sebastian Littel ()

package programmierenuebungen;

import java.util.Scanner;

/**
 *
 * @author MadDeer
 * 
 * TestString: Hallo-dies/ist,ein;Test_der.neuen.Software.txt
 * 
 */
public class replaceDotses {
    //kann direkt in der main-Methode gemacht werden
    public static void main (String[] args){
        //Benutzereingabe holen
        Scanner scanner = new Scanner(System.in);
        System.out.print("Bitte geben Sie den String an: ");
        String dateiname = scanner.nextLine();
        //Ueberfluessige Zeichen entfernen
        try{
            dateiname = dateiname.replaceAll("/", " ");
        } catch (Exception e){/*Nothing to do*/}
        try{
            dateiname = dateiname.replaceAll(",", " ");
        } catch (Exception e){/*Nothing to do*/}
        try{
            dateiname = dateiname.replaceAll(";", " ");
        } catch (Exception e){/*Nothing to do*/}
        try{
            dateiname = dateiname.replaceAll("-", " ");
        } catch (Exception e){/*Nothing to do*/}
        try{
            dateiname = dateiname.replaceAll("_", " ");
        } catch (Exception e){/*Nothing to do*/}
        //Trennen nach Dateiendung und Rest
        String name = dateiname.substring(0,dateiname.lastIndexOf("."));
        try{
            name = name.replaceAll("\\.", " ");
        } catch (Exception e){/*Nothing to do*/}
        //Ausgabe
        System.out.println("Ausgabe: " + name + dateiname.substring(dateiname.lastIndexOf(".")));
    }
}
                

Lösung von: Mad Deer (FH Ulm)

open System

let replaceFilename (filename : string) (rc : string) = 
    let _ext =
        let _fl = filename.LastIndexOf(".") 
        if _fl >= 0 then 
            filename.Substring(_fl, filename.Length - _fl) 
        else ""

    let _filename = 
        filename.Substring(0, filename.Length - _ext.Length)
        
    _filename.Replace((char rc), ' ') + _ext
    
Console.Write "Replace Char: "
let fName = Console.ReadLine()

Console.Write "Filename: "    
let rChr = Console.ReadLine()

replaceFilename fName rChr
                

Lösung von: Vural Acar ()

function replaceDotsSaveLast(str, chr) {
   chr = chr || " ";
   var lio = str.lastIndexOf(".");
   str = str.replace(/\./g, chr);
   str = str.substring(0, lio) + "." + str.substring(lio+1, str.length-1);
   return str;
}

console.log(replaceDotsSaveLast("Das.ist.ein.Test.txt"));
console.log(replaceDotsSaveLast("Das.ist.ein.Test.txt", "-")); 
                                          // lissalanda@gmx.at
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// NET 6.x | C# 10.x | VS-2022

static string ReplaceCharsExceptLast(string str, char newChr = ' ')
{
    var index = str.LastIndexOf('.');
    var chrArr = str.Replace('.', newChr).ToCharArray();
    if (index > -1) chrArr[index] = '.';
    return new string(chrArr);
}

Console.WriteLine(ReplaceCharsExceptLast("Das.ist.ein.Text.txt"));
Console.WriteLine(ReplaceCharsExceptLast("Das.ist.ein.Text.txt", '_'));
                

Lösung von: Jens Kelm (@JKooP)

// C++ 17

#include <iostream>
#include <string>
#include <algorithm>

void replace_chars_except_last(std::string& str, const char chr = ' ') {
    const auto idx{ distance(std::find(str.rbegin(), str.rend(), '.'), str.rend()) - 1 };
    std::replace(str.begin(), str.end(), '.', chr);
    if (idx > -1) str[idx] = '.';
}

int main() {
    std::string t{ "Das.ist.ein.Text.txt" };
    replace_chars_except_last(t);
    std::cout << t << "\n";
}
                

Lösung von: Jens Kelm (@JKooP)

// C++ 20 | VS-2022

#include <iostream>
#include <algorithm>
#include <ranges>
#include <vector>

struct File {
    std::string name;
    char replace_char = ' ';
};

static const auto replace_dots_except_last(const File& file_) {
    auto filename{ file_.name };
    const auto index{ file_.name.rfind('.')};
    std::ranges::replace(filename, '.', file_.replace_char);
    if (index != std::string::npos) filename.at(index) = '.';
    return filename;
}

int main() {
    std::vector<File>files{
        { "Das.ist.ein.Text.txt" },        // Das ist ein Text.txt
        { "Das.ist.eine.Tabelle.xls" },    // Das ist eine Tabelle.xls
        { "DasIstEinText.txt" },           // DasIstEinText.txt
        { "Das.ist.ein.Text.txt", '_' },   // Das_ist_ein_Text.txt
        { "Test" },                        // Test
        { "Test txt", '-' }                // Test txt
    };

    for (const auto& file : files)
        std::cout << replace_dots_except_last(file) << "\n";
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

Man kann es mit den Beispielen versuchen.

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Leicht
Webcode: cxrs-hndx
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen