15. januar 2007 - 13:56
Der er
29 kommentarer og 1 løsning
kontrollere og ret linje i txt fil
Hej eksperter Jeg sidder med en txt fil hvor der fek. er 1000 forskellige linjer. Men det de har til fælles er at de alle er bygget ens op. Eksempel på en linje: 23707 ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07 Det jeg søger er noget kode hvor jeg kan trække en linje ud af gangen, og knotrollere at der er 13 skille tegn altså ";". hvis der ikke er 13 ; i en linje skal den slette den fra txt filen. Er der nogen der kan hjælpe med det?
Annonceindlæg tema
15. januar 2007 - 14:10
#1
Skal den læse en linie ad gangen, eller må det godt læse alle linierne ind, inden den begynder at tjekke for om linierne er ok ? Hvis du har RAM til at læse hele lortet ind, og så løbe det igennem og fjerne de forkerte linier, så er det pærelet.
15. januar 2007 - 14:21
#2
utestet, men der skal maks små rettelser til vil jeg mente.. try { string nyfil = ""; string gamle = ""; Textreader tr = new StreamReader("dinfil.txt"); gamle = gamle = ReadToEnd(); tr.Close(); File.Delete("dinfil.txt"); TextWriter tw = new StreamWriter("dinfil.txt"); string[] linjer = gamle.Split(new Char [] {'\n'}); for(int i = 0; i < linjer.Length; i++) { string[] count = linjer[i].Split(new Char [] {';'}); if(count.Length = 13) nyfil += linjer[i]; } tw.WriteLine(linjer); tw.Close(); } catch{}
15. januar 2007 - 14:22
#3
tilføj dette i toppen using System; using System.IO;
15. januar 2007 - 14:24
#4
lav lige en ekstra kopi af din fil;o)
15. januar 2007 - 14:35
#5
if(count.Length = 13) { nyfil += linjer[i]; nyfil += "\n"; } tjah.. man kan selv se småting.. men virker det?
15. januar 2007 - 14:45
#6
Textreader og ReadToEnd giver problemer for min compiler i visual studio
15. januar 2007 - 14:52
#7
TextReader
15. januar 2007 - 14:54
#8
mit resultat bliver at 1000 linjer forsvinder og så står der kun System.String[]
15. januar 2007 - 14:56
#9
try { string nyfil = ""; string gamle = ""; TextReader tr = new StreamReader("dinfil.txt"); gamle = ReadToEnd(); tr.Close(); File.Delete("dinfil.txt"); TextWriter tw = new StreamWriter("dinfil.txt"); string[] linjer = gamle.Split(new Char [] {'\n'}); for(int i = 0; i < linjer.Length; i++) { string[] count = linjer[i].Split(new Char [] {';'}); if(count.Length = 13) nyfil += linjer[i].ToString(); } tw.WriteLine(nyfil); tw.Close(); } catch{}
15. januar 2007 - 14:57
#10
arghh.. glemte lige at dette skal være med igen.. så denne try { string nyfil = ""; string gamle = ""; TextReader tr = new StreamReader("dinfil.txt"); gamle = ReadToEnd(); tr.Close(); File.Delete("dinfil.txt"); TextWriter tw = new StreamWriter("dinfil.txt"); string[] linjer = gamle.Split(new Char [] {'\n'}); for(int i = 0; i < linjer.Length; i++) { string[] count = linjer[i].Split(new Char [] {';'}); if(count.Length = 13) { nyfil += linjer[i].ToString(); nyfil += "\n"; } } tw.WriteLine(nyfil); tw.Close(); } catch{}
15. januar 2007 - 15:17
#11
hjalp det?
15. januar 2007 - 15:53
#12
if(count.Length = 13) skal vel være if(count.Length == 13)
15. januar 2007 - 15:58
#13
rigtigt=) jeg skriver i notepad så det er som sagt ikke utestet.. regner med spørger har lidt kendskab selv forhåbentlig
15. januar 2007 - 16:00
#14
Ikke utestet? ;) Ud over det, burde man nok bruge en StringBuilder til så mange linier.
15. januar 2007 - 17:25
#15
ja ! og hvorfor holde det hele i memory ?
15. januar 2007 - 17:27
#16
(i memory i 3 kopier)
15. januar 2007 - 17:44
#17
jeg synes det var hurtigst at kode:) og så synes jeg desuden det lød som en løsning der skal benyttes en enkelt gang på en fil hvor man ikke gider gøre arbejdet manuelt.
16. januar 2007 - 12:19
#18
Undskyld at jeg ikke lige fik svaret dig, tester det nu og så skal du nok få svar
16. januar 2007 - 12:28
#19
nej den skriver stadigvæk kun System.String[] i txt filen
16. januar 2007 - 12:46
#20
Her testet med: 23701 ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07 23702 ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07 23703 ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07 23704 ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07 23705 ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07 23706 ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07 23707 ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07 2370( ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07; 23709 ;2695312 ;SELECTR;S;S;Y;TDK ;800006249 ; 6;16/12/06;T8017 ;457203145963 ;SAGEM60;08/01/07 string srcpath = @"c:\exp.txt"; string tempname = @"c:\"+ Guid.NewGuid().ToString() + ".txt"; StreamReader o = new StreamReader(srcpath); StreamWriter t = new StreamWriter(tempname,false); while(!o.EndOfStream) { string line = o.ReadLine(); string[] tmp = line.Split(';'); if(tmp.Length==14) //der er præcis 13 semikolonner, derfor splittes linien i 14 dele t.WriteLine(line); } o.Close(); t.Close(); File.Delete(srcpath); File.Move(tempname, srcpath);
16. januar 2007 - 12:47
#21
using System; using System.IO;
16. januar 2007 - 13:08
#22
fik det til at virke, der skulle stå 14 istedet for 13. da deb ikke tælle tegn men antal udfyldte poster i []
16. januar 2007 - 15:28
#23
Lige en hurtig ting, hvorfor laver den et linjeskift (tom linje) til sidst i txt filen? Den skulle helst ikke være der!
16. januar 2007 - 15:30
#24
mit resultat af koden: try { string nyfil2 = ""; string gamle2 = ""; TextReader tr2 = new StreamReader("C:\\TEMP\\Hardware.txt"); gamle2 = tr2.ReadToEnd(); tr2.Close(); File.Delete("C:\\TEMP\\Hardware.txt"); TextWriter tw2 = new StreamWriter("C:\\TEMP\\Hardware.txt"); string[] linjer2 = gamle2.Split(new Char[] { '\n' }); for (int j = 0; j < linjer2.Length; j++) { string[] count2 = linjer2[j].Split(new Char[] { ';' }); if (count2.Length == 14) { if (j == linjer2.Length-1) { nyfil2 += linjer2[j].ToString(); } else { nyfil2 += linjer2[j].ToString(); nyfil2 += "\n"; } } } tw2.WriteLine(nyfil2); tw2.Close(); MessageBox.Show("Færdig, og alt er i orden"); } catch { }
16. januar 2007 - 15:30
#25
Men hvorfor en ekstra tom linje til sidst i txt filen?
16. januar 2007 - 15:32
#26
if(linjer[i].ToString().Trim() != "" || linjer[i].ToString() != "\n") { nyfil += linjer[i].ToString(); nyfil += "\n"; } prøv at lave et tjek som det der.
16. januar 2007 - 15:41
#27
Jeg har fundet ud af at det er tw2.WriteLine(nyfil2); funktionen der gør det. For hvis jeg udskriver teksten i en richtextbox så er der ikke noget linjeskift, mærkeligt!
16. januar 2007 - 16:13
#28
WriteLine laver en ny line.. Write gør ikke
16. januar 2007 - 17:13
#29
1000 tak, det var bedre!!!
16. januar 2007 - 17:24
#30
selv tak:)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.