» 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, Pytel




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

Astronomové objevili daleko za Plutem objekt s extrémní dráhou. Může ukazovat na existenci planety Devět

Astronomové objevili daleko za Plutem objekt s extrémní dráhou. Může ukazovat na existenci planety Devět

** Astronomové objevili daleko za Neptunem těleso 2015 TG387 ** Okolo Slunce se pohybuje po extrémně protáhlé dráze ** Jeho dráha může ukazovat na existenci planety Devět

Petr Kubala | 10

Nová americká jaderná puma změní strategii boje

Nová americká jaderná puma změní strategii boje

** Bombardér Northrop Grumman B-2 Spirit amerického letectva nedávno svrhl jadernou pumu ** Šlo o test nové varianty pumy B61-12 ** Ta by měla mít hlavice schopné explodovat se silou 0,3 až 50 kilotun

Stanislav Mihulka | 63

V doupěti hackerů na brněnské FIT: Ukázali nám útoky na Bluetooth i vlastní chytré krabičky

V doupěti hackerů na brněnské FIT: Ukázali nám útoky na Bluetooth i vlastní chytré krabičky

** Internet je plný malwaru, to už dnes ví každý ** Víte ale, že lze útočit třeba i na Bluetooth? ** Navštívil jsem hackery z brněnského FITu

Jakub Čížek | 1

Pojďme programovat elektroniku: Když už vás ten chumel součástek prostě nebaví

Pojďme programovat elektroniku: Když už vás ten chumel součástek prostě nebaví

** Levné cetky z Asie stojí dolar ** Postavíte s nimi skoro vše od teploměru po spínač zavlažování ** Má to ale jeden háček. Bude to ošklivé a povětšinou nekvalitní

Jakub Čížek | 22

Google má nové telefony, počítač a domácí displej. Česko je stále mimo

Google má nové telefony, počítač a domácí displej. Česko je stále mimo

** Google dnes představil novinky ** Dočkali jsme se nového telefonu Pixel 3, tabletopočítače a domácího displeje ** Rozšíření Google Assistenta do dalších zemí se bohužel nekoná

David Polesný | 45


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku