Avatar billede juks Novice
23. november 2007 - 15:57 Der er 12 kommentarer og
1 løsning

ændre en linje i txt fil ud fra cprnr

hej jeg har en textfil der bliver hentet ind  i en list

010120079999,Hans,1,2

hvis jeg så ændre det sidste tal i linjen  til 3

010120079999,Hans,1,3

hvordan får jeg så smidt den ind i txt filen i stedet for det gamle,
Avatar billede arne_v Ekspert
23. november 2007 - 16:07 #1
Det nemmeste er at genskrive hele tekst filen.

Hvis det nye tekst fylder præcis lige så meget som det gamle kan man seek'e positionen
og overskrive i en eksisterende fil.

Men som udgangspunkt: skriv en helt ny fil.
Avatar billede kalp Novice
23. november 2007 - 18:42 #2
ikke pænt, men også en mulighed.

            string old = "010120079999,Hans,1,2";
            int position = old.Split(',').Length - 1;
            int remove = old.Split(',')[position].Length;
            int newNumber = 3;
            old = old.Remove(old.LastIndexOf(',')+1,remove);
            string newline = old + 3.ToString();

men det skal som arne_v også skriver overskrive den gamle txt fil.
Avatar billede kalp Novice
23. november 2007 - 18:45 #3
oops..

string newline = old + 3.ToString();

til

string newline = old + newNumber.ToString();

-- sådan er det når man skriver kode direkte ind her:D
Avatar billede juks Novice
23. november 2007 - 19:18 #4
jeg tænkte det nemmeste var at slette hele linjen også skrive en ny.
hvordan får men den til at søge efter og slette den linje med samme cpr. inden man skriver den nye
Avatar billede kalp Novice
23. november 2007 - 19:36 #5
jeg går ud fra det så er fuldstændig ligegyldigt du overhovedet har nævnt den der list?

hvis du vil slette hele linjen i en fil kan du gøre noget lignende dette.

string[] lines = dintextfil.Split('\n');
StringBuilder newText = new StringBuilder();

foreach(string line in lines)
{
  if(line.StartsWith("010120079999")
  {
            string old = line;
            int position = old.Split(',').Length - 1;
            int remove = old.Split(',')[position].Length;
            int newNumber = 3;
            old = old.Remove(old.LastIndexOf(',')+1,remove);
            newText.WriteLine( old + 3.ToString() );
  }
  else
  {
    newText.WriteLine(line);
  }
}

og så kan du kalde newText.ToString() for at få hele teksten.

igen.. det er skrevet her så der kan være nogle fejl, men du burde kunne tænke dig til resten vil jeg mene:)
Avatar billede juks Novice
23. november 2007 - 19:50 #6
hehe jeg er lidt rookie er access og vba dreng , så skal lige have lidt hjælp :-) også med at få stillet de rigtigt spg --- jeg kigger lige på det tak kalp
Avatar billede juks Novice
23. november 2007 - 20:48 #7
men den gemme jo kun een linjen
hvis nu der er flere gemmer den kun den , der er rettet , skal jo kun overskrive den linje den har fundet
Avatar billede kalp Novice
23. november 2007 - 21:10 #8
jeg er ikke helt med..

koden du har gemmer hele din tekstfil.. der kaldes jo .WriteLine på StringBuilder objektet uanset hvilken linje der løbes igennem, men kun hvis linjen starter med det cprnummer du har nævnt så omskrives den før den gemmes.

så er du sikker på du har skrevet koden af korrekt?

ellers må jeg jo teste det af.. kan også være mig som bare stirrer mig blindt på et eller andet.
Avatar billede juks Novice
23. november 2007 - 21:17 #9
nej jeg har lavet en anden løsning måske lidt tosset men virker ...


kunne ikke bruge den StringBuilder
Avatar billede juks Novice
23. november 2007 - 21:19 #10
while ((Line = SR.ReadLine()) != null)
                {
                    if (Line.StartsWith(this.Cpr.Text))
                    {
                   
                        newText.WriteLine(changeline);
                    }
                    else
                    {
                        newText.WriteLine(Line);

                    }
                }
                SR.Close();
                newText.Close();
Avatar billede juks Novice
23. november 2007 - 21:19 #11
virker lidt tosset men er jo at lave en  hel ny fil som Arne forslog
Avatar billede juks Novice
13. december 2007 - 10:47 #12
smid et svar
Avatar billede juks Novice
10. juli 2008 - 14:15 #13
luk
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