Avatar billede bjarnefilm Juniormester
23. februar 2012 - 18:33 Der er 9 kommentarer og
1 løsning

Hvor er fejlen i det her?

Jeg er ved at lave et csharp program. Programmet skal hente datoen og anbringe den i en tegnstreng. Senere skal der ske en masse, med det er ligemeget nu. Her er koden:

### Kode start ###
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class tekst_tv_henter : Form
    {
        public tekst_tv_henter()
        {
            InitializeComponent();
        }

        private void tekst_tv_henter_Load(object sender, EventArgs e)
        {
            // Kode til en logbog.
            // create a writer and open the file
            TextWriter skriv = new StreamWriter("logbog.txt");

            // write a line of text to the file
            skriv.WriteLine(" ");
            skriv.WriteLine(" Programmet 'Hent tekst tv' er startet.");
            skriv.WriteLine(" ");

            // hent datoen.
            DateTime now = DateTime.Now;
            skriv.WriteLine(" Dato og tid: (now)        " + now);
            skriv.WriteLine(" ");
           
            // Flyt datoen ned i en tegnstreng.
            string now_string = now.ToString();
            skriv.WriteLine(" Dato og tid: (now_string) " + now_string );
            skriv.WriteLine(" ");

            // Dan en tegnstreng, med datoen.
            // Tegnstrengen skal være på formen: 2012-02-20
            string dato = "===================="; // (20 stk)
            dato = now_string[6] + now_string[7] + now_string[8] + now_string[9] + "-" +
                  now_string[3] + now_string[4] + "-" + now_string[0] + now_string[1];
            skriv.WriteLine(" Dato: (1) " + dato);
            skriv.WriteLine(" ");

            dato = now_string[0] + "=" + now_string[1] + "=" + now_string[2] + "=" +
                          now_string[3]  + "=" + now_string[4]  + "=" +
                          now_string[5]  + "=" + now_string[6]  + "=" + 
                          now_string[7]  + "=" + now_string[8]  + "=" +
                          now_string[9]  + "=" + now_string[10] + "=" +
                          now_string[11] + "=" + now_string[12] ;
            skriv.WriteLine(" Dato: (2) " + dato);
            skriv.WriteLine(" ");
                // Formen lukkes.
            skriv.WriteLine(" Programmet 'Hent tekst tv' er afsluttet.");
            // close the stream
            skriv.Close();
        }
    }
}
### Kode slut  ###

Her er 'logbog.txt' :

### Logbog start ###
Programmet 'Hent tekst tv' er startet.
Dato og tid: (now)        23-02-2012 18:21:36
Dato og tid: (now_string) 23-02-2012 18:21:36
Dato: (1) 197-02-23
Dato: (2) 2=3=-=0=2=-=2=0=1=2= =1=8
Programmet 'Hent tekst tv' er afsluttet.
### Logbog slut  ###

Af en eller anden grund, så udtages årstallet forkert. I dato 1 står årstallet som 197. I dato 2 står årstallet som 2012. Det er dato 1, der skal bruges, dato 2 er kun til test. I begge tilfælde står koden:

now_string[6] + now_string[7] + now_string[8] + now_string[9]

Så det skulle være det samme.

Er der en, der kan se hvad fejlen er?

MVH
Bjarne
Avatar billede arne_v Ekspert
23. februar 2012 - 19:11 #1
At du ikke udnytter .NET !!

:-)

DateTime har en ToString som tager argumenter.

now.ToString("yyyy-MM-dd")

eller noget tilsvarende.
Avatar billede bvli Praktikant
23. februar 2012 - 19:13 #2
Du laver en masse som er lavet for dig i forvejen. Du kan angive formatet af strengen i ToString. F.eks.

string s = DateTime.Now.ToString("g");

Vil give dig det du søger.
Avatar billede erikjacobsen Ekspert
23. februar 2012 - 19:17 #3
Det kan jeg ikke være uenig i. Men det forklarer ikke hvad der er galt. Jeg tror du kører en tidligere version af programmet. Prøv at ændre udskriften til fx

  skriv.WriteLine(" Dato xxxxxxxxxx: (1) " + dato);

og se om ændringen kommer med.
Avatar billede bjarnefilm Juniormester
24. februar 2012 - 17:58 #4
Jeg lytter altid til et godt råd.
Jeg skal lige surfe på datetime og tostring.
Avatar billede bjarnefilm Juniormester
04. marts 2012 - 15:05 #5
Jeg har surfet på datetime og tostring.
Desværre kan det ikke bruges.
Jeg vil gerne have datoen på formen "2012-02-20", men den mulighed er der ikke. Jeg kan ihvertfald ikke finde den.

Der er også en anden ting.
Jeg vil gerne bruge så få forskellige kommandoer som muligt.
Man skal altid rette i programmer senere.
Når jeg om et år læser noget med:

string tekst = deltekst[8] + deltekst[9] ;

Så kan jeg se hvad der sker, eller hvad det er meningen der skal ske. Hvis der istedet står en kommando, som jeg ikke kan udenad, så er det sværere at læse.

Jeg har valgt at løse problemet med denne kode:

private void hent_dags_dato()
        {
            skriv.WriteLine(" Funktionen 'hent_dags_dato' er startet.");
            skriv.WriteLine(" ");
       
            // Hent datoen.
            DateTime now = DateTime.Now;
         
            // Flyt datoen ned i en tegnstreng.
            string now_string = now.ToString();
         
            // Dan en tegnstreng, med datoen.
            // Tegnstrengen skal være på formen: 2012-02-20
                     
            char char_dato_0 = now_string[0];
            char char_dato_1 = now_string[1];
            char char_dato_2 = now_string[2];
            char char_dato_3 = now_string[3];
            char char_dato_4 = now_string[4];
            char char_dato_5 = now_string[5];
            char char_dato_6 = now_string[6];
            char char_dato_7 = now_string[7];
            char char_dato_8 = now_string[8];
            char char_dato_9 = now_string[9];
         
            dags_dato = char_dato_6.ToString() + char_dato_7.ToString() +
                        char_dato_8.ToString() + char_dato_9.ToString() + "-" +
                        char_dato_3.ToString() + char_dato_4.ToString() + "-" +
                        char_dato_0.ToString() + char_dato_1.ToString();

            skriv.WriteLine(" Funktionen 'hent_dags_dato' er afsluttet.");
            skriv.WriteLine(" ");
        }

Koden giver det ønskede.

Tak til alle, der har brugt tid på spørgsmålet.
Smid et svar, så deler jeg pointene.
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 15:15 #6
Er det ikke bare fra http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx at bruge

(helt utestet)

  DateTime now = DateTime.Now;
  String s = now.ToString("yyyy-MM-dd");
Avatar billede arne_v Ekspert
04. marts 2012 - 15:17 #7
.ToString("yyyy-MM-dd")

virker her.

Og jeg synes godt nok det er meget nemt at laese hvad den goer.
Avatar billede arne_v Ekspert
04. marts 2012 - 15:18 #8
og et svar
Avatar billede bjarnefilm Juniormester
04. marts 2012 - 17:14 #9
Det er rigtig, at den foreslåede løsning er bedre.
Jeg har skrevet den ind i programmet, det ser sådan her ud:

namespace WindowsFormsApplication1
{
    public partial class tekst_tv_henter : Form
    {
        public tekst_tv_henter()
        {
            InitializeComponent();
        }

        // Erklær en tekst-skriver og sæt den til at pege på logbogen.
        TextWriter skriv = new StreamWriter("logbog.txt");

        // Denne tegnstreng indeholder dags dato.
        string dags_dato;

        private void tekst_tv_henter_Load(object sender, EventArgs e)
        {
            skriv.WriteLine(" Programmet 'Hent tekst tv' er startet.");
            skriv.WriteLine(" ");

            // Anbring dags dato i en tegnstreng.
            DateTime now = DateTime.Now;
            dags_dato = now.ToString("yyyy-MM-dd");
            skriv.WriteLine(" Dagens dato er: " + dags_dato);
            skriv.WriteLine(" ");

            // Hent fra DR1.
            WebClient henter = new WebClient();
            string sti_fra = "http://www.dr.dk/fttvimg/DR1/132_0001-243.gif";
            string sti_til = @"C:\tekst-tv\tekst 2012-03-04\132";
            henter.DownloadFile(sti_fra, sti_til);

            // Formen lukkes.
            skriv.WriteLine(" Programmet 'Hent tekst tv' er afsluttet.");
            // close the stream
            skriv.Close();
        }

Programmet er blevet ca 30 linier kortere, og det er godt.
Logbogen ser sådan her ud:

Programmet 'Hent tekst tv' er startet.

Dagens dato er: 2012-03-04

Programmet 'Hent tekst tv' er afsluttet.

Endnu engang tak for hjælpen.
Mht lukning af spørgsmålet, så giver jeg det lidt tid, og så deler jeg pointene mellem alle svar.
Avatar billede erikjacobsen Ekspert
04. marts 2012 - 17:16 #10
Ingen point til mig, tak.
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