» 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


Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

** Tesla představila elektrický kamion ** Má obdivuhodný výkon i dojezd ** Prodávat by se měl už za dva roky

Včera | Vojtěch Malý | 151

30 počítačových brzd, které vám zpomalí Windows

30 počítačových brzd, které vám zpomalí Windows

Na webu najdete hromadu rad, jak zrychlit počítač a Windows. My jsme na to šli opačně a naopak jsme hledali činnosti, které ho nejvíce zpomalují. Toto je třicítka těch základních.

12.  11.  2017 | Jakub Čížek | 90

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

** Každá elektrická krabička má konektor pro napájení nebo baterii ** Jenže pozor, jednou by to tak nemuselo být ** Drobná elektronika se může živit rádiovými vlnami

14.  11.  2017 | Jakub Čížek | 15


Aktuální číslo časopisu Computer

Otestovali jsme 5 HDR 4K televizorů

Jak natáčet video zrcadlovkou

Vytvořte si chytrou domácnost

Radíme s koupí počítačového zdroje