excel: načtení dat z *.txt

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

excel: načtení dat z *.txt

Příspěvek od lelekdk »

Zdravím,

vstupní problém:
chtěl bych načíst textový soubor, který obsahuje čísla a jediný oddělovací znak je mezera. Textový soubor nemá jednotné formátování čísel (číslo v řádku 1 může být ve sloupečku 5 a číslo v řádku 2 odpovídající předchozímu číslu může být ve sloupečku 6 - to je způsobeno právě tím, že jediný oddělovač je mezera)

ukázka čísel v *.txt souboru:
Obrázek

Prvním úkolem je načíst *.txt soubor do excelu a pak pomocí maker upravit formátování dat a následně excel převést do CSV (středník)

formátování buněk v sešitu nastavím jako text a v dokumentu pro načtení jako externí reference nastavím všechny sloupečky jako text a po načtení textového dokumentu zruším odkaz na referenci.
Po načtení *.txt dokumentu dostanu:
Obrázek

dobré je, že se vše opravdu všechny čísla načtou jako text (obsah buňky je hned po načtení osazen na levé straně jako text)
trošku horší už je to, že na začátku některých čísel chybí nuly tedy "001" se převede jako "1" atd.

Potřeboval bych poradit, jak správně načíst *.txt soubor, tak aby se nevynechali u některých čísel nuly.

Díky mnohokrát.
c# Kozel zahradníkem
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: excel: načtení dat z *.txt

Příspěvek od lelekdk »

přikládám ještě ukázku části textového souboru s čísly:

kdyby někdo nechtěl z nějakých důvodů stahovat *zip, tak možno si jen zkopírovat níže uvedená čísla do vlastního textového souboru:

Kód: Vybrat vše

518 815 824 876 560 857 867 918 810 1 107 1 117 1 168
532 838 846 903 575 880 888 945 834 1 139 1 147 1 204
585 897 904 964 628 940 947 1 007 893 1 205 1 212 1 272
650 977 982 1 049 693 1 020 1 024 1 092 973 1 300 1 304 1 372
664 998 1 002 1 074 706 1 041 1 044 1 116 994 1 329 1 332 1 404
730 1 074 1 075 1 153 773 1 116 1 118 1 195 1 069 1 412 1 414 1 492
1 084 1 550 1 538 1 681 1 126 1 592 1 581 1 724 1 502 1 968 1 956 2 099
2 036 2 764 2 720 3 005 2 079 2 806 2 762 3 047 2 683 3 410 3 366 3 651
Nemáte oprávnění prohlížet přiložené soubory.
c# Kozel zahradníkem
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: excel: načtení dat z *.txt

Příspěvek od lelekdk »

tohle by mohla být celkem dobrá poznámka, při načítání *.txt souboru používám typ souboru: Windows (ANSI). (zkusím i jiné typy souboru testovat)
c# Kozel zahradníkem
Pishpunta
Nováček
Nováček
Uživatelský avatar
Registrován: 25. led 2016

Re: excel: načtení dat z *.txt

Příspěvek od Pishpunta »

Chápu správně, že mezera je v souboru oddělovač čísel a zároveň oddělovač tisíců?
Naimportoval bych celý řádek vždy do jedné buňky a potom v makru si s celým řádkem pohrál, funkce Split ti rozdělí řádek na jednotlivá čísla a pak si je makrem zase spojíš, jak potřebuješ.
Bude potřeba určit nějaká pravidla, kdy je mezera oddělovač tisíců a kdy oddělovač čísel.
Například něco takového (použito na ukázce):

Kód: Vybrat vše

Sub Zpracuj()
  Dim S, R As String
  Dim L() As String
  For i = 1 To 8
    S = Range("A1").Cells(i, 1)
    L = Split(S)
    R = L(0)
    For j = 1 To UBound(L)
      If Len(L(j - 1)) = 1 Then 'když předchozí číslo je délky 1, spoj ho s následujícím (je to pravděpodobně oddělovač tisíců)
        R = R + L(j)
      Else: R = R + ";" + L(j)
      End If
    Next j
    Range("A1").Cells(i, 2) = R
  Next i
End Sub
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: excel: načtení dat z *.txt

Příspěvek od lelekdk »

Díky moc. Ušetřilo mi to ranec času.

jinak už jsem přišel také na to, proč se mi převedla některá "čísla" na čísla a ne na text.
Ono totiž import dat z textu do excelu přes Excel průvodce importem textu je uživatelsky fucking friendly.

nejen, že není možné scrolovat myší v tom náhledu dat, ale hlavně tam nejsou zobrazeny všechny sloupečky (facepalm). Takže je třeba ručně myší popojet až dolů pro zobrazení zbytku sloupečků, které je pak možné nastavit jako text a pak je vše už OK. Škoda, že také nejde vybrat všechny sloupečky a provést hromadnou úpravu.

Obrázek

Obrázek

Buď jak buď, s tím makrem to bylo rychlejší a bezpečnější, ještě jednou díky :)
c# Kozel zahradníkem
Zivan
Začátečník
Začátečník
Registrován: 30. čer 2005
Bydliště: Brno
Kontaktovat uživatele:

Re: excel: načtení dat z *.txt

Příspěvek od Zivan »

To je nejaka skolni uloha? Protoze to makro funguje jen pokud jsou cisla mensi nez 10 000. A navic bude spojovat cisla < 10, ktere jsou za sebou.
HP Elitebook 845 G8 (Ryzen 5650U, 32GB RAM, WD SN570 1TB, 14" fullHD IPS) + HP USB-C G5 Essential + 29" LG 29UM65 + 22" Eizo S2202W
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: excel: načtení dat z *.txt

Příspěvek od lelekdk »

jsem si makro upravil tak, aby to spojovalo i 10k a doplnil další okrajové podmínky. V tom dokumentu je i nějaká hlavička (String nebo Integer), jiný první sloupec (String) atd. Zase nemůžu chtít, aby někdo řešil celý problém za mě.

Jinak se jedná o rozsáhlé ceníky starších výrobků (mám pouze takto nevhodně v *.txt souboru), které chci přeházet do excelu, v excelu upravit a pak dále s nimi pracovat ve vlastní aplikaci (c#).
c# Kozel zahradníkem
Zivan
Začátečník
Začátečník
Registrován: 30. čer 2005
Bydliště: Brno
Kontaktovat uživatele:

Re: excel: načtení dat z *.txt

Příspěvek od Zivan »

Jestli sis ho upravil, tak OK. Pak uz me napada jen mozny problem s limitem na radky, do verze 2003 umel Excel jen 65 tisic radku, od verze 2007 uz umi pres milion.
HP Elitebook 845 G8 (Ryzen 5650U, 32GB RAM, WD SN570 1TB, 14" fullHD IPS) + HP USB-C G5 Essential + 29" LG 29UM65 + 22" Eizo S2202W
Odpovědět

Zpět na „Programování a web“