Avatar billede sbarnney Nybegynder
27. marts 2006 - 20:15 Der er 8 kommentarer og
1 løsning

Read/Write CSV fil i VSS2005.

Windows Form - C#.

Jeg har en text.csv som ser ud som flg.:

"06900000000047","30000,00","dato","NAVN",
"6260000047","36,00","dato","Navn",
"0530000005515","18,00","dato","Navn",
"62600000008","18,00","dato","Navn",
"626000000","18,00","dato","Navn",
"59600000000","72,00","dato","Navn",
"62600000000","18,00","dato","Navn",

denne skal jeg have ændret til en ny fil.

jeg skal have indsat flere koloner både får, inde i og efter:, samt indsat dagsdato.

eks.

"xxxxxx","06900000000047","30000.00","06042006","yyyyyyy","NAVN","","","","",
"xxxxxx","6260000047","36,00","06042006","yyyyyyy","DKK","Navn","","","","",
"xxxxxx","0530000005515","18,00","06042006","yyyyyyy","Navn","","","","",
"xxxxxx","62600000008","18,00","06042006","yyyyyyy","Navn","","","","",
"xxxxxx","626000000","18,00","06042006","yyyyyyy","Navn","","","","",
"xxxxxx","59600000000","72,00","06042006","yyyyyyy","Navn","","","","",
"xxxxxx","62600000000","18,00","06042006","yyyyyyy","Navn","","","","",

Dette skal gøre i en Windows form (C#) så ledes at jeg selv skal vælge filen. (openFileDialog).

Det kunne fungere således:

Filen vælges, den læses (til DataSet ??), der laves en ny fil med div. ændringer. Færdig.


Er der nogle der kan hjælpe ??

MVH Barnney
Avatar billede arne_v Ekspert
27. marts 2006 - 20:21 #1
hvis det skal laves paent saa goer du som foelger (pseudo kode):

open StreamReader til input fil
open StreamWriter til output fil
while mere data i input fil
    laes linie fra input fil
    pars den ud i kolonner
    konstruer en instans af klassen InputObject
    konstruer en instans af klasse OutputObject
    skriv denne til output fil
luk input fil
luk output fil

hvis dit format er som beskrevet maa du kunne bruge almindelig Split
til at dele op i kolonner
Avatar billede sbarnney Nybegynder
27. marts 2006 - 20:34 #2
Det lyder rigtig fint, kan du vise mig det i rigtig C#.
Jeg tænker på fra While mere ... hvis vi kalder StreamReader for sr og StreamWriter for sw.

barnney
Avatar billede arne_v Ekspert
27. marts 2006 - 20:41 #3
skitseret:

string line;
while((line = sr.ReadLine()) != null)
{
    string[] parts = line.Split(",".ToCharArray());
    InputObject io = new InputObject(parts[0].Replace("\"",""),parts[1].Replace("\"",""),...);
    OutputObject oo = new OutputObject(io);
    sw.WriteLine("\"" + oo.A + "\",\"" + oo.B +  ...);
}
Avatar billede sbarnney Nybegynder
27. marts 2006 - 21:03 #4
"InputObject is a field but is used like a type" ?? dette er fejlen jeg får på flg. kode:

using System;
using System.IO;
using System.Data;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections.Generic;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        object InputObject;
        object OutputObject;

        public Form1()
        {
            InitializeComponent();

            FileStream file = new FileStream("test.csv", FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(file);

            string s = sr.ReadToEnd();
            string textFile = "nyTest.csv";

            FileStream nyfile = new FileStream(textFile, FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter sw = new StreamWriter(nyfile);
         
            string line;

            while((line = sr.ReadLine()) != null)
            {
                string[] parts = line.Split(",".ToCharArray());
                InputObject io = new InputObject(parts[0].Replace("\"",""),parts[1].Replace("\"",""),"xxx");
                OutputObject oo = new OutputObject(io);
                sw.WriteLine("\"" + oo.A + "\",\"" + oo.B +  "xxx");
            }

            sr.Close();
            file.Close();
            sw.Close();
            file.Close();
        }
    }
}
Avatar billede arne_v Ekspert
27. marts 2006 - 21:11 #5
Du skulle selv lave 2 klasser InputObject og OutputObject

Alternativt kan do jo ogsaa bare udskrive parts igen
Avatar billede sbarnney Nybegynder
27. marts 2006 - 21:53 #6
kan du vise mig de 2 klasser ??
Avatar billede arne_v Ekspert
27. marts 2006 - 23:03 #7
det er bare 2 data klasser med felter svarende til kolonner i CSV filen

er det for meget at goere ude af det saa bare

            while((line = sr.ReadLine()) != null)
            {
                string[] parts = line.Split(",".ToCharArray());
                sw.WriteLine("\"xxxxxxxxx\"," + parts[0] + ...);
            }
Avatar billede sbarnney Nybegynder
28. marts 2006 - 14:22 #8
Super nu køre det. Får jeg lige et "svar" fra dig.

BArnney
Avatar billede arne_v Ekspert
28. marts 2006 - 14:47 #9
svar
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