TXT soubory + replace – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

TXT soubory + replace – C / C++ – Fórum – Programujte.comTXT soubory + replace – C / C++ – Fórum – Programujte.com

 

Patrik
~ Anonymní uživatel
133 příspěvků
5. 11. 2013   #1
-
0
-

Ahoj, potřebuji změnit několik tisíc .ini souborů ve kterých je kdekoliv napsané money="nějaké číslo" na money=30000 

kde mám chybu? :(

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string directory = Path.GetTempPath();
         DirectoryInfo dirinfo = new DirectoryInfo(directory);
            FileInfo[] files = dirinfo.GetFiles("acc_*.ini");
            foreach (FileInfo i in files)
            {

                for (int x = 0; x < 20000; x++)
                {
             string str = File.ReadAllText(i.ToString());
str = str.Replace("money=" + x.ToString() + "", "money=30000");
             File.WriteAllText(i.ToString(), str);
                }
            }
            
        }
    }
}
Nahlásit jako SPAM
IP: 213.195.202.–
KIIV
~ Moderátor
+43
God of flame
5. 11. 2013   #2
-
0
-

Na meneni nekolika tisic souboru bude tohle naprosto priserne neefektivni - kazdej nacist 20001 krat, 20001 krat hledat substring, pak 20001 krat zapsat a tak...

A to jeste nesmi byt nahodou kolem = mezery a tak...

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
5. 11. 2013   #3
-
0
-

mezery tam nejsou :D to není problém, je to neefektivní ale potřebuji to na jedno použití :D

když to zapnu, neumí to najít ty soubory acc_*.ini a v předešlém programu to šlo, a nemám tušení jestli vubec funguje "money=" + x.ToString() + " ", 

Nahlásit jako SPAM
IP: 213.195.202.–
KIIV
~ Moderátor
+43
God of flame
5. 11. 2013   #4
-
0
-

#3 Patrik
"money=" + x.ToString() + " ",  bude hodne zalezet na tom, jeslti mas za tema cislama mezeru.. pokud ne a je tam rovnou enter, tak to asi moc fungovat nebude...

kazdopadne soubor staci nacist pred tim cyklem a ulozit po nem... nema smysl to furt prenacitat a prepisovat.. (obzvlaste SSD a flash disky by ti moc podekovaly)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
5. 11. 2013   #5
-
0
-

dobře, ale ted tam mám zas brutální chybu, když si načtu sleep abych zjistil kde ta chyba je, v tomto složení se nedostanu za

string directory = Path.GetTempPath();

DirectoryInfo dirinfo = new DirectoryInfo(directory);

FileInfo[] files = dirinfo.GetFiles("acc_*.ini");

a když dám pryč acc_ a dám jenom *.ini, a tech souborů je tam fakt dost :D při debuggingu mi to píše "tmpofferstate.ini nebyl nalezen."

Nahlásit jako SPAM
IP: 213.195.202.–
KIIV
~ Moderátor
+43
God of flame
5. 11. 2013   #6
-
0
-

mozna ti ty funkce vracej jen nazev souboru a musis k tomu jeste taky pripojit adresar, kde jsou...

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Patrik
~ Anonymní uživatel
133 příspěvků
5. 11. 2013   #7
-
0
-

přesná cesta to samé :D

padne to na tomto řádku "foreach (FileInfo i in files)" ale když zadám ten ini soubor přesně stejně to nejde, když zadám *.ini tak to píše že nenašel "tmpofferstate.ini" a když ho vytvořím tak to funguje pouze na něj :(

Nahlásit jako SPAM
IP: 213.195.202.–
Ovrscout
~ Anonymní uživatel
113 příspěvků
6. 11. 2013   #8
-
0
-

#7 Patrik

Pokud si to nechcete psát celé sám, dobrý nástroj na práci s textovými soubory je sfk: http://stahlworks.com/dev/swiss-file-knife.html

občas je problém najít v těch desítkách funkcí co to umí tu správnou, ale běží opravdu rychle.

příkaz pro nahrazování zhruba toho co potřebujete
(nezapisuje změny do souborů, jen vypíše "změněné" řádky na obrazovku - pokud konzole umí tak barevně)
sfk.exe filt -spat -lswhere "money*=*\"" -rep "_\"*\"_\"3000\"_" -dir . -file *.ini

Pro povolení zápisu do souboru doplnit -write -yes  za sfk filt
sfk.exe filt -write -yes ...............................

Varování:občas tomuto programu dělá problém řetězené vzájemné nahrazování:
např. nahradit v "1234" řetězec "23" za "14" a zároveň naradit řetězec "11" za "44". Výsledek by mněl být 4444 ale někdy je, a jindy není :), takové věci je lepší zpracovat na více průchodů souborem, pak je to spolehlivé.

Nahlásit jako SPAM
IP: 193.165.79.–
Ovrscout
~ Anonymní uživatel
113 příspěvků
6. 11. 2013   #9
-
0
-

#8 Ovrscout
omlouvám se, na konci má být  acc_*.ini
sfk.exe filt -spat -lswhere "money*=*\"" -rep "_\"*\"_\"3000\"_" -dir . -file acc_*.ini

a se zápisem
sfk.exe filt -write -yes -spat -lswhere "money*=*\"" -rep "_\"*\"_\"3000\"_" -dir . -file acc_*.ini

Nahlásit jako SPAM
IP: 193.165.79.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 17 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý