» Poradna » Programy

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

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 6/6
 |   |  Microsoft Windows 7 Firefox 16.0  |  [88.146.153.---]

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  |  [84.242.75.---]

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  |  [88.146.153.---]

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  |  [84.242.75.---]

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

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 16.0  |  [88.146.153.---]

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  |  [88.146.153.---]

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, Složitý způsob



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


USB-C je konektor, který by chtěl vládnout všem

USB-C je konektor, který by chtěl vládnout všem

** USB-C se tváří jako nejuniverzálnější konektor všech dob ** Pravda je to však jen z části ** Při výběru příslušenství s USB-C dobře studujte parametry

20.  1.  2018 | Stanislav Janů | 58

Přechod z Windows na macOS: Co vás čeká a nemine

Přechod z Windows na macOS: Co vás čeká a nemine

** 5 kroků, které vás čekají, když se rozhodnete přejít z Windows na počítač značky Apple se systémem macOS ** macOS umí přenést data z počítače s Windows ** Při přechodu si budete zvykat na nové funkce a chování systému

17.  1.  2018 | Stanislav Janů | 148


Aktuální číslo časopisu Computer

Zachraňte nefunkční Windows

Jak nakupovat a prodávat kryptoměny

Otestovali jsme konvertibilní notebooky

Velký test 14 herních myší