» Poradna » Programy

C# - odstranění znaků (000 apod.) v textových souborech

 |   |  Microsoft Windows 7 Firefox 16.0

Dobrý den,již několik hodin se marně zabývám problémem, jak odstranit přebytečné nuly v IdNr čísle uvnitř textových souborů umístěné ve složce. Struktura textových souborů je následující:IdNr 000000100Name blablaLastName blablaDatum blablaatd.Samozřejmě každý soubor má jiné IdNr, včetně měnícího se počtu nul za sebou, ale ostatní struktura zůstavá stejná. Jde mi o to, jaký algoritmus najít v C# , aby mi v IdNr odstranil jen tyto nuly za sebou, ale číslo 100 ponechal. Zkoušel jsem použít Stringbuilder replace, ale to mi nahraní úplně všechny nuly, což je na pytel. Samozřejmě dá se to udělat ručně, ale pokud mám třeba 3000 souborů, to je pak na střelení do hlavy.Budu rád za jakoukoliv radu, jak to zpatlat... Abych se vyhnul pomluvám, že by to za mě dělal někdo jiný, posílám dosavadní zdrojový kod (samozřejmě nefunkční)...using System.IO;namespace Delzero{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void tlac_prochazet_Click(object sender, EventArgs e) { DialogResult dialog = folderBrowserDialog1.ShowDialog(); if (dialog == DialogResult.OK) TP_zdroj.Text = folderBrowserDialog1.SelectedPath; } private void Tlac_start_Click(object sender, EventArgs e) { var files = Directory.GetDirectories(TP_zdroj.Text, "*.txt", SearchOption.TopDirectoryOnly); foreach (var fPath in files) { String[] oldLines = File.ReadAllLines(fPath); String key = "IdNr 000"; if (oldLines.Length != 0) { IList<String> newLines = new List<String>(); foreach (String line in oldLines) { String newLine = line; if (line.Contains(key)) { int numberRangeStart = line.IndexOf(key) + key.Length; int numberRangeEnd = line.IndexOf(" ", numberRangeStart); String numberStr = line.Substring(numberRangeStart, numberRangeEnd - numberRangeStart); int number = int.Parse(numberStr); String withoutZeros = number.ToString(); newLine = line.Replace(key + numberStr, key + withoutZeros); newLines.Add(line); } newLines.Add(newLine); } File.WriteAllText(fPath,newLines); } } } }}Momentálně mi to píše chybu při ukládání souboru v řádku File.WriteAllText(fPath,newLines);...Už jsem z toho na švestku. Tohle je třeba zbytečně složitý způsob..Nechci hotový kod, jen poradit, jak donutit C#, že pokud na nultém řádku, kde je IdNr, je 2 a více nul za sebou, aby je smazal a ponechal číslo za nulama, poté soubor uložil a načetl další.. (jednoduše řečeno)Díky moc za jakékoliv reakce, nebo nějaký tip

Odpovědi na otázku

 |   |  Microsoft Windows XP Chrome 23.0.1271.26

No je to trochu zbytecne slozity zpusob. Co ti to hazi za chybu? Mozna ti to nedovoli zapsat ta nova data, protoze mas ten soubor porad otevrenej. Zaviras ten soubor po precteni dat metodou ReadAllText?Jinak by stacilo tu radku jednoduse splittnout na dva textovy retezce, nez tam slozite hledat indexy

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Už jsem i zkoušel zapisovat přes File.WriteAllLines(fPath, newLines);Ale Pořád mi Studio hází chybyError 1 The best overloaded method match for 'System.IO.File.WriteAllLines(string, string[])' has some invalid arguments Error 2 Argument '2': cannot convert from 'System.Collections.Generic.IList<string>' to 'string[]' Ale nechápu , proč ..Jinak předtím soubory nezapisuji

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows XP Chrome 23.0.1271.26

Potom staci misto newLines funkci prdat newLines.ToArray();

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Pak to píše že , String numberStr = line.Substring(numberRangeStart, numberRangeEnd - numberRangeStart); Délka nemůže být menší než nula.Název parametru: lengthJá na to kašlu.. Zkusím se na ten kod vyprdnout a jít pře Reulérní výrazy, jak psal Nargon

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Opera 9.80

Asi nejsnadnější to máš přes regulární výrazy:string text = System.IO.File.ReadAllText("soubor.txt");text = System.Text.RegularExpressions.Regex.Replace(text, "IdNr 0*", "IdNr ");System.IO.File.WriteAllText("soubor", text);

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0

Máte recht, sice je to napsané pro každý soubor zvlášť, ale to už nebude problém upravit pro celou složku..Když si uvědomím, kolik jsem ztratil času, aniž bych věděl, že tahle snadná funkce vůbec existuje...Hold člověk se musí pořád učit Strašně moc VÁM děkuji !!!!!

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Apod, String, NewLine, Složitý způsob




Určitě si přečtěte

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

** Vědci spočítali, jak velká by musela být posádka pro vícegenerační let k nejbližší hvězdné soustavě ** Proxima Centauri se nachází 4,3 světelných let od nás ** Za současných technologií bychom k ní letěli 6300 let

Petr Kubala | 53

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

** Pornografie údajně představuje třetinu internetové obsahu a je technologický tahounem ** Do erotického obsahu postupně zasahuje i virtuální realita ** Kromě vizuálního vjemu se pracuje také na virtuálním uspokojení toho hmatového

Jan Dudek | 28

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

Nechcete platit za Total Commander? Těmito bezplatnými programy ho můžete nahradit

** Total Commander je na Windows takřka legendou ** Licence však stojí více než tisíc korun ** Našli jsme pro vás deset alternativ dostupných zdarma

Karel Kilián | 141

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

** Apple odhalil své plány na zcela nové mapy ** Několik let pracuje na nových mapách, které by měly předběhnout konkurenci ** Objeví se s příchodem iOS 12 pro vybrané státy

Karel Javůrek | 50


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji