Avatar billede mcgoat Nybegynder
05. juli 2006 - 09:37 Der er 9 kommentarer og
1 løsning

Simulere Tabulator

Måske en underlig titel.. men.... er i gang med at lave min "egen" commandopromt..

Det indput jeg får når jeg lister filer ser ca sådan ud:

00-00-0000 00:00 Autoexec.bat 0
00-00-0000 00:00 fil.fil 15610867
00-00-0000 00:00 enandenfil.gnu 444558
00-00-0000 00:00 blah.bla 15

Som I kan se står date, time, filnavn fint nok.. Men filstørrelsen står jo lidt akærvet afhængig af hvor langt filnavnet er. Kan jeg lave noget smart for det kommer til at stå som det skal?

Koden:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            String command = "";
            Console.WriteLine("Teh 1337 DOS version");
            Console.WriteLine(" ");

            while (command != "exit")
            {
                Console.Write("C:\\");
                command = Console.ReadLine();
                sendcommand1(command);
            }
           
        }

        static void sendcommand1(String commando)
        {
            switch (commando)
            {
                case "dir":
                    System.IO.DirectoryInfo dire = new System.IO.DirectoryInfo(@"C:\");
                    Console.WriteLine("Listing files in: " + dire.Root);
                    foreach (System.IO.FileInfo file in dire.GetFiles("*.*"))
                    {
                        Console.WriteLine("{0}  {1}  {2}", file.CreationTime.ToString().Substring(0,16) ,file.Name, file.Length);
                    }
                    break;
                case "exit":
                    break;
                default:
                    Console.WriteLine("Unknown Command...");
                    break;
            }
        }
    }
}
Avatar billede jps6kb Novice
05. juli 2006 - 09:52 #1
Altså, den mest simple (basale) løsning, ville være at du talte chars i filnavnet og så indsatte spaces indtil et antal char er nået. Dog kan filnavne jo variere meget i længde med mindre du bruger 16bit navne, hvilket jeg går ud fra du ikke gør?
Ellers skulle du sætte størrelsen først og så filnavnet. :) Så størrelsen består af ex. 10tegn. Så hvis en fil er 47667 stor, så ville du skrive 47667 og 5 mellemrum og så filnavnet. :)

Det var lige et forslag om ikke andet.
Avatar billede mcgoat Nybegynder
05. juli 2006 - 09:58 #2
hmm... Prøver det lige :
Avatar billede mcgoat Nybegynder
05. juli 2006 - 10:05 #3
Hvordan finder jeg ud af hvor mange numre 19474 består af.. altså = 5 ?
Avatar billede mcgoat Nybegynder
05. juli 2006 - 10:13 #4
Fik det sq til at virke :)

foreach (System.IO.FileInfo file in dire.GetFiles("*.*"))
                    {
                        long filesize = file.Length;
                        String name = file.Name;
                        String date = file.CreationTime.ToString().Substring(0, 16);
                        int diff = 10 - filesize.ToString().Length;

                        Console.Write(date + "  ");
                        Console.Write(filesize);
                        for (int i = 0; i < diff; i++)
                        {
                            Console.Write(" ");
                        }
                        Console.Write(name);
                        Console.WriteLine("");

Smid et svar
Avatar billede jps6kb Novice
05. juli 2006 - 10:16 #5
Det gør du sådan her: file.Length.ToString().Length
Avatar billede jps6kb Novice
05. juli 2006 - 10:17 #6
Super.. jeg smider lige et svar så.. ;)
Avatar billede jps6kb Novice
05. juli 2006 - 10:22 #7
Tak for point ;)
Avatar billede mcgoat Nybegynder
05. juli 2006 - 10:26 #8
tak for ideen :)
Avatar billede nielle Nybegynder
05. juli 2006 - 10:40 #9
Det kan også gøres med PadRight:

Console.WriteLine("{0}  {1}  {2}", file.CreationTime.ToString().Substring(0, 16), file.Name.PadRight(25, ' '), file.Length);
Avatar billede nielle Nybegynder
05. juli 2006 - 10:44 #10
... eller med en modifier på {1} pladsholderen:

Console.WriteLine("{0}  {1,-25:s}  {2}", file.CreationTime.ToString().Substring(0, 16), file.Name, file.Length);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester